2011-11-20 105 views
0

这里是我的代码,它完成了它的工作,但大部分是它不像我告诉它使用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); 
      } 

     } 
    }); 

这里是输出:(我想目前的两叫做排名前增加一列,并将它从1)

Name   Kills 

Raknath  20 

AceFire6  15 

AceFire6  12 

AceFire6  10 

Raknath  9 

Q22   7 

Q22   5 

回答

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具有的2一个killsAceFire6具有的1一个kills值的所有值,所有的值,等等,然后选择杀敌数量。

所以在最后,你会得到这样的结果:

AceFire6 3 
AceFire6 2 
AceFire6 1 
Raknath 1 

你需要的是总结的杀死了,不管每人有多少人 - 我认为 - 游戏。

对于你的第二个问题(行数)见this答案的另一个问题。

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

SELECT @rn:[email protected]+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 ... :)

+0

谢谢,我会试试这个:) – AceFire6

+0

这就像我想要的那样工作:D非常感谢! – AceFire6

+0

没问题,很高兴我可以帮忙... :) – LeChe

0

尝试这样的:

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

而作为@LeChe Saied如何操作,您可以使用SUM(kills)在您的字段列表以获得每个名称的总杀伤力。

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

我认为在他的代码中,他会在实际的'SELECT'之前遇到'SET'问题 - 我猜他是想要一个语句。 :) – LeChe

+0

我编辑了最后一段代码,所以只有一个sql查询 – Cyclonecode