我正在尝试从单个表查询数据集,其中包含来自多个用户的测验答案/条目。我想从每个用户中提取得分最高的条目。
我的数据如下所示:
ID TP_ID quiz_id name num_questions correct incorrect percent created_at
1 10154312970149546 1 Joe 3 2 1 67 2015-09-20 22:47:10
2 10154312970149546 1 Joe 3 3 0 100 2015-09-21 20:15:20
3 125564674465289 1 Test User 3 1 2 33 2015-09-23 08:07:18
4 10153627558393996 1 Bob 3 3 0 100 2015-09-23 11:27:02
我的查询如下所示:
SELECT * FROM `entries`
WHERE `TP_ID` IN('10153627558393996', '10154312970149546')
GROUP BY `TP_ID`
ORDER BY `correct` DESC
在我看来,应该做的是从 IN
子句中获取两个用户,按正确
答案的数量对它们进行排序,然后将它们分组在一起,所以我应该得到这两个用户的 2 个最高分数。
实际上,它给了我两个结果,但 Joe 给出的结果给了我两个值中较低的一个 (2),Bob 排在第一位,得分为 3。交换到 ASC 排序可以保持分数相同,但将 Joe 排在第一位.
那么,我怎样才能实现我所需要的呢?
最佳答案
您正在寻找 groupwise maximum ,可以通过将分组结果连接回表来获得:
SELECT * FROM entries NATURAL JOIN (
SELECT TP_ID, MAX(correct) correct
FROM entries
WHERE TP_ID IN ('10153627558393996', '10154312970149546')
GROUP BY TP_ID
) t
当然,如果用户有多条得分最高的记录,则会全部返回;如果您只想要某个子集,则需要表达确定哪个子集的逻辑。
关于mysql - ORDER BY 和 GROUP BY 这些结果在单个查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32741457/