如何更改此代码以使数据组正确?

时间:2011-11-20 11:55:02

标签: java mysql jdbc jtable

这是我的代码,它完成了它的工作,但主要是它不像我告诉它使用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 个答案:

答案 0 :(得分:2)

关于第一期,请参阅下文。

简短回答
请改用此语句:

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的{​​{1}}的所有值进行分组,2的所有值都为{{1} }} AceFire6等的值,然后选择杀戮量。

所以最后,你会得到这个结果:

kills

你想要的是总结杀戮,无论这个人有多少 - 我假设 - 游戏。

对于您的第二个问题(行数),请参阅另一个问题的this回答。

修改
好吧,这样的事情应该有用(没有保证,我没有测试声明):

1

快乐的FPS-ing ......:)

答案 1 :(得分:0)

试试这个:

// 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;