我有三个表School, Grade, Student
。表Grade
的{{1}}列Foreign Key
引用了s_id
的{{1}}列Primary Key
,表id
的引用为{{ 1}}列School
引用表Student
的{{1}}列Foreign Key
。我需要选择school_name,即身高低于170或高于180的学生人数。现在,我编写这样的select查询。
g_id
我必须为每一列使用Primary Key
。是否有更好的方法来做到这一点?
答案 0 :(得分:5)
以下使用SUM()
聚合器,而MySQL在对值求和以实现所需的输出时将布尔值视为1
或0
。
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