在下面的查询中,我有一个包含两个字段course_name
和course_id
的基本表格。我试图通过查询显示前三个课程,它们出现在表格中的次数。我正在使用COUNT
,然后我正在比较其他选择中的值以确定前三个,最后按GROUP by course_id
显示结果。我收到一个mysql语法问题。如何显示排名前三位的课程? FIDDLE
SELECT course_name, course_id, COUNT(1) AS cnt
FROM courses
JOIN (SELECT distinct cnt cnt3
FROM courses
ORDER BY cnt DESC
LIMIT 2, 1) x
ON cnt >= cnt3
ORDER by cnt DESC
GROUP BY course_id
表架构:
CREATE TABLE courses
(`course_name` varchar(15), `course_id` int)
;
INSERT INTO courses
(`course_name`, `course_id`)
VALUES
('Math', 1),
('Science', 2),
('PHYS', 3),
('Study Hall', 4),
('History', 5),
('Social Studies', 6),
('Math', 1),
('PHYS', 3),
('Math', 1),
('Science', 2),
('Science', 2),
('Study Hall', 4),
('History', 5)
;
期望的结果:
+-------------+-------+
| Course_name | Count |
+-------------+-------+
| Math | 3 |
| Science | 3 |
| PHYS | 2 |
| Study | 2 |
| History | 2 |
+-------------+-------+
答案 0 :(得分:3)
您的语法错误是由于:
ON cnt >= cnt3
cnt是别名,您不能在连接中使用它。此外,您的order by和group by子句的顺序错误。
编辑从此处开始
查看您的查询,您可能已经过度设计了它。这不会给你答案吗?
select course_name, course_id, count(*) records
from courses
group by course_name, course_id
having count(*) > 1
order by records desc
limit 3
答案 1 :(得分:0)
Select course_name,cnt from(
Select course_id,course_name,count(course_id) as cnt group by course_id,course_name
)tmp
Order by cnt desc limit 0,3