yyc*_*zjl 2 mysql sql join subquery
我有三张桌子School, Grade, Student.表Grade具有Foreign Key列s_id上引用Primary Key列id的School和表Student具有Foreign Key列g_id上引用Primary Key列id表中的Grade.我需要选择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
Run Code Online (Sandbox Code Playgroud)
我必须join为每一列使用.有更好的方法吗?
以下使用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
Run Code Online (Sandbox Code Playgroud)