如何编写SQL查询实现按回答数量从多到少排列所有问题
问题排查与修正SQL写法
原代码问题
- 使用
INNER JOIN关联Questions和Answers表,会直接过滤掉没有任何回答的问题,不符合「列出所有问题」的需求,应替换为LEFT JOIN保留全量问题数据 - 缺少按问题分组的聚合逻辑,无法统计每个问题对应的回答数量
- 排序规则错误,
max(comments.id)中的comments表未在查询中引入,也不是要求的排序依据,排序应该基于每个问题的回答数量倒序
正确查询语句
仅输出问题ID的简化版本
SELECT q.id FROM Questions q LEFT JOIN Answers a ON q.id = a.question_id GROUP BY q.id ORDER BY COUNT(a.id) DESC;
同时展示问题信息和回答数的完整版本
SELECT q.id AS 问题ID, q.content AS 问题内容, -- 可根据实际表字段调整 COUNT(a.id) AS 回答数量 FROM Questions q LEFT JOIN Answers a ON q.id = a.question_id GROUP BY q.id, q.content -- 所有非聚合的查询字段都需要加入GROUP BY,仅保留q.id可兼容大部分数据库场景 ORDER BY 回答数量 DESC;
内容的提问来源于stack exchange,提问作者Fayas Hussain
相关产品推荐
相关产品推荐

