Как бы я изменил этот код, чтобы сделать группу данных правильно? - PullRequest
0 голосов
/ 20 ноября 2011

Вот мой код, он выполняет свою работу, в основном, но он не группируется, как я сказал, используя SQL statemnt.Кроме того, мне было интересно, как я могу создать собственный столбец, который нумеруется так, чтобы верхняя часть была «1», а оттуда она нумеруется.

btnLeaderBoardUpdate.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            String sql3 ="Select Name, Kills from honscores group by Name, Kills order by Kills DESC";
            ResultSet rs;
            try {
                st = conn.prepareStatement(sql3);
                rs = st.executeQuery();
                table_2.setModel(DbUtils.resultSetToTableModel(rs));

            } catch(Exception e) {
                JOptionPane.showMessageDialog(null, e);
            }

        }
    });

Вот вывод :( Я хочу добавить столбецперед двумя текущими называется ранг и имеет номер от 1)

Name           Kills

Raknath        20

AceFire6       15

AceFire6       12

AceFire6       10

Raknath        9

Q22            7

Q22            5

Ответы [ 2 ]

2 голосов
/ 20 ноября 2011

Ваш первый выпуск см. Ниже.

Краткий ответ
Используйте это утверждение вместо:

Select Name, sum(Kills) from honscores group by Name order by Kills DESC

Длинный ответ
Вы не хотите группировать по количеству убийств, а только по имени и хотите агрегировать результат.

Если у вас есть эти данные:

AceFire6  2
AceFire6  2
AceFire6  1
AceFire6  3
Raknath   1
Raknath   1

и используя ваше утверждение, база данных сгруппирует все значения для AceFire6, которые имеют значение kills 2, все значения для AceFire6, которые имеют значение kills 1 и т. Д. а затем выберите количество убийств.

Итак, в итоге вы получите такой результат:

AceFire6  3
AceFire6  2
AceFire6  1
Raknath   1

То, что вы хотите, это суммировать убийства, независимо от того, сколько человек выпало за - я предполагаю - игру.

По второму вопросу (количество строк) см. этот ответ на другой вопрос.

Edit:
Хорошо, что-то вроде этого должно работать (без гарантий, я не проверял утверждение):

SELECT @rn:=@rn+1 AS rank, Name, kills
FROM (
  Select Name, sum(Kills) as kills from honscores group by Name order by Kills DESC
) t1, (SELECT @rn:=0) t2;

Happy FPS-ing ...:)

0 голосов
/ 20 ноября 2011

Попробуйте:

// first query
SET @ranked = 0;
// second query
SELECT @ranked:=@ranked+1 ranked, name, kills FROM honscores 
GROUP BY name, kills 
ORDER BY ranked ASC;

И, указав @LeChe, вы можете использовать SUM(kills) в своем списке полей, чтобы получить общее количество убийств для каждого имени.

SELECT @ranked:=@ranked+1 ranked, 
       name, 
       SUM(kills) kills FROM honscores, (SELECT @ranked:=0) t2
GROUP BY name
ORDER BY ranked ASC;
...