Mysql 如何联接两个表,然后使用CASE表达式确定它们的排序方式?SQL
考虑以下模式:Mysql 如何联接两个表,然后使用CASE表达式确定它们的排序方式?SQL,mysql,sql,join,case,Mysql,Sql,Join,Case,考虑以下模式: 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), ); 我的目标是建立一个表格,显示每门学科注册的学生人数——按学生人数降序排列 到目前为止,我有一个查询就是这样做的:
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
这就是我想要的。。。。然而,我需要包括一个案例,它将根据两个或更多的系是否有相同数量的学生而改变排序
如果两个或多个系的学生人数相同,则结果表需要按字母顺序排序,因此应如下所示:
dept_name number_of_students
--------- ----------
English 2
History 1
Math 2
Science 3
我的SQL知识到此为止。。我有一个大概的想法,我应该如何做到这一点..也许使用案例陈述?但我不知道如何或在何处放置它,以及如何比较“学生人数”列中的两个后续值,然后据此做出决定
非常感谢任何帮助或建议 这有点棘手。您可以使用窗口功能查看有多少部门具有相同的计数,然后根据计数是否大于1进行排序:
SELECT dept_name, number_of_students
FROM (SELECT d.dept_name, COUNT(*) as number_of_students,
COUNT(*) OVER (PARTITION BY COUNT(*)) as cnt_cnt
FROM Students s JOIN
Departments d
ON s.dept_id = d.dept_id
GROUP BY d.dept_name
) d
ORDER BY (CASE WHEN MAX(cnt_cnt) OVER () > 1 THEN dept_name END),
number_of_student;
我解决了它谢谢你的主意。。我正在尝试这一个,并不断得到语法错误关于'('
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)