Android order by sum(score)desc返回错误结果

Android order by sum(score)desc返回错误结果,android,sql,sum,sql-order-by,Android,Sql,Sum,Sql Order By,我不知道是什么原因导致了这一点,但我试图得到的水平,其中有最高的分数总和的所有答案的水平 Cursor c = myDataBase .rawQuery( "select level " + "from answers where player ='" + player

我不知道是什么原因导致了这一点,但我试图得到的水平,其中有最高的分数总和的所有答案的水平

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

某一级别的所有答案都有一个分值。它不断返回10个级别中的10个级别,而实际上另一个级别的分数最高。。。如果我申请了asc订单,效果很好:s

如果你只想获得最高分数的级别,那么请尝试使用如下方法:

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


为什么这句话不更容易

SELECT TOP 1 level 
FROM answers 
WHERE player = {player} 
ORDER BY score DESC
请小心,如果在保存播放机的第一个结果之前执行此查询,则不会得到任何结果


Serge

它给出了一个错误。。。12-03 16:27:55.602:E/AndroidRuntime29505:原因:android.database.sqlite.SQLiteException:在编译时滥用聚合函数sum:,从答案中选择级别,其中player='yesr'按级别分组,总和分数也为maxsum分数,你能指出为什么除了错误之外,这应该有效,而我的不行吗?@MatthiasVanb你的查询和这个查询的基本区别是:这返回的是最高分数的级别,而你的查询返回的是所有排序的级别。我用select中的sum更新了答案中的查询。你能试试吗?我试过了,并给出了一个错误,我必须在“have”之前使用group by子句,所以我将其更改为:select level from select level,将玩家=“+player+”逐级分组+逐级分组且maxlevelscore=levelscore的答案中的分数相加为levelscore+,但这只返回第一个级别,而不是得分最高的级别。@MatthiasVanb:奇怪。我更新了答案中的查询,将max也放在select中。希望这能奏效。@MatthiasVanb看起来并没有把max和sum放在一起。我用两种可能的变体更新了答案。希望两者都能起作用。你能试试吗?我确实把查询和我得到的一些变量结合起来了,我缩短了它,因为这是查询出错的部分。你知道为什么asc做得很好而desc做得不好吗?我只知道SQLlite在幕后发挥了很多魔力。您能否检查分数字段的声明,确认它只包含数值?当出现问题时,我通常通过adb/SQLlite进行手动查询,它只包含数字项。。。永远不会是空的
           "select level from "+
                   +" (select level, sum (score) as levelscore, "
                   + " from answers where player ='"
                   + player
                   + "' group by level )"
                   + "order by levelscore desc LIMIT 1";
SELECT TOP 1 level 
FROM answers 
WHERE player = {player} 
ORDER BY score DESC
SELECT level, SUM( score ) AS scoresum
FROM answers
WHERE player = ?
GROUP BY level
ORDERBY scoresum DESC
LIMIT 0, 1