【发布时间】:2020-04-10 19:53:58
【问题描述】:
数据
+----+-----------+--------------+------------+--------+------------+
| id | action | question_id | answer_id | q_num | timestamp |
+----+-----------+--------------+------------+--------+------------+
| 5 | "show" | 285 | null | 1 | 123 |
| 5 | "answer" | 285 | 124124 | 1 | 124 |
| 5 | "show" | 369 | null | 2 | 125 |
| 5 | "skip" | 369 | null | 2 | 126 |
+----+-----------+--------------+------------+--------+------------+
MYSQL
select question_id as survey_log
from
(
SELECT sum(CASE WHEN action='answer' THEN 1 ELSE 0 END) as num,
question_id,
count(distinct id) as den
from
survey_log
group by question_id
) b
order by (num/den) desc
limit 1
输出
285
MSSQL
select top 1 question_id as survey_log
from
(
SELECT sum(CASE WHEN action='answer' THEN 1 ELSE 0 END) as num,
question_id,
count(distinct id) as den
from
survey_log
group by question_id
) b
order by (num/den) desc
输出
369
对于大多数情况,我使用 top 1 和 limit 1 来获得类似的结果,直到这个问题。不知何故,在这个查询中,我得到了不同的结果。我哪里错了? TOP 子句在 MSSQL 中的执行顺序是否不同?还是我完全混淆了两者的用例?
来自Leetcode的原始问题
【问题讨论】:
标签: mysql sql sql-server