考虑以下架构:
CREATE TABLE Students (
student_id int,
student_name varchar(255),
gender varchar(255),
dept_id int
);
CREATE TABLE Departments (
dept_id int,
dept_name varchar(255),
);
我的目标是建立一个表格,显示每个科目注册的学生人数 - 按学生人数降序排列......
到目前为止,我有一个查询可以做到这一点:
SELECT
dept_name, count(*) as 'number_of_students'
FROM
Students
JOIN
Departments on students.dept_id=Departments.dept_id
GROUP BY
dept_name
ORDER BY
dept_name
并得到以下结果:
dept_name number_of_students
--------- ----------
History 1
English 2
Math 2
Science 3
这就是我想要的......但是,我需要包含一个案例,该案例将根据两个或更多部门是否有相同数量的学生来更改顺序......
如果 2 个或更多部门有相同数量的学生,则结果表需要按字母顺序排序,因此应如下所示:
dept_name number_of_students
--------- ----------
English 2
History 1
Math 2
Science 3
我的 SQL 知识到这里就结束了..我大概知道应该如何做到这一点..也许可以使用 CASE 语句?但不确定如何或在哪里放置它以及如何比较 number_of_students 列中的两个后续值,然后据此做出决定?
非常感谢任何帮助或建议!
最佳答案
SELECT
dept_name, count(*) as 'number_of_students'
FROM
Student
JOIN
Departments on student.dept_id=Departments.dept_id
GROUP BY
dept_name
ORDER BY
(CASE WHEN number_of_students = number_of_students THEN dept_name ELSE number_of_students
END)
我解决了
关于mysql - 如何 JOIN 两个表,然后使用 CASE 表达式来确定它们的 ORDER BY 方式? SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57718483/