mysql - 如何 JOIN 两个表,然后使用 CASE 表达式来确定它们的 ORDER BY 方式? SQL

标签 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),
);

我的目标是建立一个表格,显示每个科目注册的学生人数 - 按学生人数降序排列......

到目前为止,我有一个查询可以做到这一点:

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/

相关文章:

PHP mySQL 结果到变量

sql - 在结果集末尾嵌入动态行

Android - 如何加入两个视频

mysql - MYSQL查找同名行

mysql left join - 使用 NULL 和条件返回行

sql - 如何使用两个表执行更新

javascript - 如何获取尚未创建的数据库项目的 ID

php - ZF2 mysql带区间查询

mysql请求如果不存在

mysql - SQL删除基于来自同一个表的查询的行?