mysql - SQL 子查询作为具有多个 where 子句的列

标签 mysql sql join subquery

我有三个表学校、年级、学生。表Grade 有一个外键s_id,该列引用主键id School 和表 Student 有一个引用主键外键g_id > 表 Grade 的列 id。我需要选择 school_name,高度低于 170 或高于 180 的学生人数。现在,我像这样编写选择查询。

SELECT School.name, School.id as sid, 
       (Select count(*) from Student inner join Grade on 
                     Student.g_id=Grade.id inner join School on 
                     Grade.s_id=School.id where School.id=sid and 
                     Student.height < 170) as under_170,  
       (Select count(*) from Student inner join Grade on 
                     Student.g_id=Grade.id inner join School on 
                     Grade.s_id=School.id where School.id=sid and Student.height > 180) as over_180
from School

我必须对每一列使用join。有更好的方法吗?

最佳答案

以下内容使用 SUM() 聚合器,MySQL 在对值求和以实现所需输出时将 bool 值视为 10 .

SELECT school.id, school.name, SUM(student.height < 170) AS under_170, SUM(student.height > 180) AS over_180
FROM school
INNER JOIN grade ON (school.id = grade.s_id)
INNER JOIN student ON (grade.id = student.g_id)
GROUP BY school.id

关于mysql - SQL 子查询作为具有多个 where 子句的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51165795/

相关文章:

mysql - 在MySQL中先按数字然后按字母对记录进行排序

php - 使用包含空值的数组执行 PDO

sql - 在创建 SQL 关系时感到困惑

sql - 外部连接 SQL 表?

mysql - Laravel join 用于获取一对多关系?

mysql DATE_FORMAT() 之间给了我错误

php - 如何检查 MySQL 'date' 列中是否存在特定日期?

c# - OracleCommand.Executenonquery 抛出 'System.InvalidOperationException'

mysql - 如果连接表中的列值为 0 或不存在,如何通过连接选择行

sql - 将 SQL 查询转换为 Sequelize ORM 返回不需要的结果