【问题标题】:SQL subquery as column with multiple where caluseSQL子查询作为具有多个where子句的列
【发布时间】:2018-12-12 10:19:22
【问题描述】:

我有三张桌子School, Grade, Student。表Grade 有一个Foreign Keys_id 引用Primary KeyidSchool 和表Student 有一个Foreign Keyg_id 引用@987645332@ 列@987643331@ @ 表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

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

【问题讨论】:

    标签: mysql sql join subquery


    【解决方案1】:

    以下使用 SUM() 聚合器,并且 MySQL 在对值求和以实现所需输出时将布尔值视为 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多