2012-12-03 46 views
1

不知道是什么原因造成这一点,但我试图让具有该级别的所有答案的heighest得分求和的水平。为了通过SUM(得分)降序返回错误结果

Cursor c = myDataBase 
       .rawQuery(
         "select level " 
           + "from answers where player ='" 
           + player 
           + "' group by level order by sum (score) desc", 
         null); 

某个级别的所有答案都有一个分数值。它不断地返回(10级),10级,而实际上另一个层次的得分最高...如果我申请的递增顺序,它工作得很好:■

回答

2

如果你试图让只有得分最高的水平,那么尝试下面使用having

  "select level " 
      + "from answers where player ='" 
      + player 
      + "' group by level " 
      + " having sum (score) = max(sum (score))"; 

编辑:

  "select level from (select level, max(levelscore) as maxscore from "+ 
           +" (select level, sum (score) as levelscore, " 
           + " from answers where player ='" 
           + player 
           + "' group by level)" 
      + ") where levelscore = maxscore"; 

  "select level from "+ 
        +" (select level, sum (score) as levelscore, " 
        + " from answers where player ='" 
        + player 
        + "' group by level)" 
        + "order by levelscore desc LIMIT 1"; 
+0

它给出错误... 12-03 16:27:55.602:E/AndroidRuntime(29505):引起:android.database.sqlite.SQLiteException:滥用聚合函数sum():,编译时:从玩家='yesr'的级别中选择级别具有总和(分数)= max(总和(分数)) 另外,你能指出为什么这应该工作(除了错误),而我的不? –

+1

@MatthiasVanb你的查询和这个查询之间的基本区别是:当你的查询返回所有排序的时候,这返回最高分的等级。我更新了查询,并在选择中加入了'sum'。你可以试试吗? –

+0

我试了一下,给那我不得不条款“具有”之前使用一组错误,所以我把它改为:“选择(选择的值,总和(分数)为levelscore级” \t +“从回答“player ='” \t + player \t +“'group by level)” \t +“group by level(levelscore)= levelscore”但是这只返回第一个级别,而不是最高分值。 –

0

为什么没有这一报告(容易)

SELECT TOP 1 level 
FROM answers 
WHERE player = {player} 
ORDER BY score DESC 

要小心,如果你执行这个查询之前,“保存”玩家的第一个结果,你会得到任何结果...

塞尔

+0

嗯,我把查询和一些更大的变量结合起来,缩短了它,因为这是查询出错的部分。你有什么想法,为什么asc做得很好,desc没有? –

+0

我只知道SQLlite在幕后做了很多魔术。你可以检查“分数”字段的声明,确认它只包含数字值吗? 出问题时,我通常通过ADB手动查询/ SQLlite http://stackoverflow.com/questions/5800469/how-to-open-android-adb-from-command-prompt –

+0

它仅包含数字物品...并且从不空置 –

1
SELECT level, SUM(score) AS scoresum 
FROM answers 
WHERE player = ? 
GROUP BY level 
ORDERBY scoresum DESC 
LIMIT 0, 1