mysql - 合并表并按升序获取输出

标签 mysql sql

我有两个这样的表:

student                                   department
id  department_id                      department_id  department_name

5     5                                  5              Computer Science
1     4                                  4              Architecture
3     2                                  1              Mathematics
4     5                                  3              Chemistry
2     4                                  2              Physics

我编写了如下查询并得到了以下结果。

SELECT DEPARTMENTS.DEPT_NAME AS D, STUDENTS.DEPT_ID AS D_ID
FROM STUDENTS 
INNER JOIN DEPARTMENTS
ON STUDENTS.DEPT_ID=DEPARTMENTS.DEPT_ID ;



Computer Science 5
Computer Science 5
Physics 2
Architecture 4
Architecture 4

到这里为止还不错,但我想要类似的东西

Computer Science 2
Architecture 2
Physics 1
Chemistry 0
Mathematics 0

即部门名称,学生人数,其中学生人数按降序排列。

我可以向查询中添加什么?

最佳答案

我会使用 COUNT(*) 并将其作为 ORDER BY 的子查询

SELECT * FROM (
SELECT DEPARTMENTS.DEPT_NAME, COUNT(*) AS num_ofstudents
FROM STUDENTS 
LEFT JOIN DEPARTMENTS
ON STUDENTS.DEPT_ID=DEPARTMENTS.DEPT_ID
GROUP BY Departments.Dept_name
) AS a ORDER BY num_ofstudents

编辑 - 感谢 AaronDietz 指出这一点! 您应该将 INNER JOIN 替换为 LEFT JOIN,以便查询包含 [Departments] 中没有任何学生的记录。另外,我不需要包含子查询。

SELECT DEPARTMENTS.DEPT_NAME, COUNT(*) AS num_ofstudents
FROM STUDENTS 
LEFT JOIN DEPARTMENTS
ON STUDENTS.DEPT_ID=DEPARTMENTS.DEPT_ID
GROUP BY Departments.Dept_name
ORDER BY num_ofstudents

关于mysql - 合并表并按升序获取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46105155/

相关文章:

sql - 在不在投影中的字段上按 sql 排序

java - 无法使用java在mysql中存储印地语文本

java - 从哪里开始 Java 项目

php - MySQL 查询为我正在制作的论坛创建 "bump-system"

mysql - AWS Aurora - 无法连接到 aws aurora 数据库

SQL 查询根据同一表中其他列的值更新列

mysql查询重复结果

mysql - 判断一个点是否在区域内

mysql - 检查两个数组中的相同索引 : IN (1, 2,3) AND IN (A, B, C)

php - mysql DISTINCT 关键字不适用于多列连接表