#java #sql
#java #sql
Вопрос:
___WORKER_ID___|_______OCCUR________
20 | 1
20 | 2
21 | 3
22 | 5
20 | 1
According to this table, I need to know each worker how many occur?
Such as Worker_id=20 has occur is 4
Worker_id=21 has occur is 8
Я могу получить два значения из этой рабочей таблицы с помощью этого кода
String sql = "SELECT Table.worker_id,Table.occur FROM keyword_pages Table"
" WHERE keyword_id=" PUID;
conn = getConnection();
stm = conn.createStatement();
rs = stm.executeQuery(sql);
while (rs.next()) {
int kwd_id = rs.getInt(1); /**Worker_id is 20,20,21,22,20*/
int occur = rs.getInt(2); /**Worker_id is 1,2,3,5,1*/
}
Как получить количество событий для каждого работника?
Это мое кодирование. Я использую hashmap для хранения каждой записи. и сохраните hashmap в linklist. Но у меня нет идеи для получения результата.
conn = getConnection();
stm = conn.createStatement();
rs = stm.executeQuery(sql);
while (rs.next()) {
int kwd_id = rs.getInt(1);
int occur = rs.getInt(2);
hMap.put(kwd_id, occur);
listID.add(hMap);
//System.out.println(kwd_id " | " occur);
}
for (int i = 0; i < listID.size(); i ) {
}
Комментарии:
1. A
Map<Integer,Integer>
позволяет сохранять целочисленные значения для каждого идентификатора рабочего.2.
select worker_id, sum(occur) from keyword_pages group by worker_id
3. Повторное добавление hMap в ListID ни к чему вас не приведет.
Ответ №1:
String sql = "SELECT T.worker_id, SUM(T.occur) AS osum"
" FROM keyword_pages T"
" WHERE keyword_id=" PUID
" GROUP BY T.worker_id";
Теперь rs.getInt(2)
или rs.getInt("osum")
даст сумму группы.
Ответ №2:
Map<Integer,Integer> id2count = new HashMap<>();
while (rs.next()) {
int kwd_id = rs.getInt(1); /**Worker_id is 20,20,21,22,20*/
int occur = rs.getInt(2); /**Worker_id is 1,2,3,5,1*/
Integer count = id2count.get( kwd_id );
if( count == null ){
count = Integer.valueOf( 1 );
} else {
count = occur;
}
id2count.put( kwd_id, count );
}
** Позже **
Код для извлечения и печати накопленных значений:
for( Integer key: id2count.keySet() ){
System.out.println( key ": " id2count.get(key) );
}
Комментарии:
1. Количество целых чисел = id2count.get( kwd_id); что-то не так. он переходит в cath (исключение)
2. Этот код абсолютно правильный. Вы правильно скопировали его? Если есть исключение NullPointerException: вы правильно инициализировали id2count?