SQL复杂查询-同一查询中的ORDER BY和GROUP BY无法正常工作
我有一张这样的桌子, 现在,我想找出获胜者,谁在最早的时候给出了正确的答案。我试过类似的方法SQL复杂查询-同一查询中的ORDER BY和GROUP BY无法正常工作,sql,sql-server,Sql,Sql Server,我有一张这样的桌子, 现在,我想找出获胜者,谁在最早的时候给出了正确的答案。我试过类似的方法 SELECT COUNT(is_correct), msisdn FROM [robi_contest].[dbo].[tbl_quiz_reply] WHERE is_correct = 1 group by msisdn 输出是- 现在,当我尝试按创建时间排序时,它并没有给出预期结果,而是给出了错误。要找出获胜者,查询应该是什么 试试这个 SELECT COUNT(is_correct),
SELECT COUNT(is_correct), msisdn
FROM [robi_contest].[dbo].[tbl_quiz_reply]
WHERE is_correct = 1 group by msisdn
输出是-
现在,当我尝试按创建时间排序时,它并没有给出预期结果,而是给出了错误。要找出获胜者,查询应该是什么 试试这个
SELECT COUNT(is_correct), msisdn
FROM [robi_contest].[dbo].[tbl_quiz_reply]
WHERE is_correct = 1
group by msisdn
order by max(msisdn) or Min(msisdn)
尝试按所需的最大值或最小值排序尝试以下操作:
SELECT COUNT(is_correct), msisdn
FROM (SELECT * FROM tbl_quiz_reply WHERE is_correct = 1 ORDER BY creation_time DESC) as test
group by msisdn
SELECT COUNT(is_correct), msisdn , min(creation_time) as min_creation
FROM [robi_contest].[dbo].[tbl_quiz_reply]
WHERE is_correct = 1 group by msisdn
order by min_creation
问题是您没有将列作为组的一部分返回。对列应用min()可以让您按isdn的第一次出现顺序进行排序。我想这就是您需要的
SELECT TOP (1) WITH TIES
msisdn , COUNT(is_correct) AS NumberOfCorrectAnswers,
max(creation_time) AS LastCorrectAnswerDatetime
FROM [robi_contest].[dbo].[tbl_quiz_reply]
WHERE is_correct = 1
GROUP BY msisdn
ORDER BY COUNT(is_correct) DESC, max(creation_time) ASC
mysql或sql server?“它没有给出预期的结果,但出现了错误。”如果出现错误,请至少共享错误消息。你预计会发生什么?您希望按未选择但正在聚合的属性进行排序。顺序是什么样的?最好将示例数据作为一个表变量,将insert语句作为文本,删除无关的列。我们不需要打字练习,谢谢。此外,请尝试制作简短的示例数据,但其中包含您试图处理的边缘情况,然后还向我们显示预期结果,最好是以文本形式显示。我使用的是sql Server。它给出了类似的内容,Msg 1033,Level 15,State 1,Line 1 ORDER BY子句在视图、内联函数、派生表、子查询中无效,和通用表表达式,除非还指定了TOP或FOR XML。您能给SQLFIDLE演示吗?所以我可以帮你。@Sadikhasan基本上,你不能在子查询中放入
order by
,而不在子查询中放入TOP n
。它给出了-Msg 144,级别15,状态1,第3行不能在group by子句的group by列表中使用聚合或子查询。