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列表中使用聚合或子查询。