【问题标题】:How would I change this code to make the data group properly?我将如何更改此代码以正确创建数据组?
【发布时间】:2011-11-20 11:55:01
【问题描述】:

这是我的代码,它主要完成了它的工作,但它不像我告诉它使用 SQL 语句那样进行分组。另外我想知道如何制作一个自定义列,它自己编号,以便顶部为“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);
            }

        }
    });

这是输出:(我想在当前两个称为 rank 之前添加一列,并将其编号从 1 开始)

Name           Kills

Raknath        20

AceFire6       15

AceFire6       12

AceFire6       10

Raknath        9

Q22            7

Q22            5

【问题讨论】:

    标签: java mysql jdbc jtable


    【解决方案1】:

    关于您的第一个问题,请参见下文。

    简答
    请改用此语句:

    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
    

    你想要的是总结杀戮,不管这个人每场 - 我假设 - 游戏有多少。

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

    编辑:
    好吧,这样的事情应该可以工作(不保证,我没有测试这个语句):

    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;
    

    快乐的 FPS-ing... :)

    【讨论】:

    • 谢谢,我会试试这个:)
    • 这完全符合我的要求:D 非常感谢!
    • 没问题,很高兴我能帮上忙... :)
    【解决方案2】:

    试试这个:

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

    【讨论】:

    • 我认为在他的代码中,在实际的SELECT 之前,他会遇到SET 的问题——我猜他想要一个声明。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    相关资源
    最近更新 更多