【问题标题】:Basic SQL - need a 2nd Count() column基本 SQL - 需要第二个 Count() 列
【发布时间】:2012-02-02 08:04:32
【问题描述】:
SELECT a.ClassName, b.TeacherName, COUNT(c.Class_ID)
from dbo.Class a
inner join dbo.Teacher b on a.Teacher_ID = b.Teacher_ID
left outer join dbo.ClassRegistration c on a.Class_ID = c.Class_ID
group by a.ClassName, b.TeacherName 

我目前有上面的 SQL 脚本。它工作正常,其想法是显示 ClassName、TeacherName 和该类在 ClassRegistration 表中出现的次数。现在下一部分是我有点卡住的地方。 ClassRegistration 表上还有一个名为“HasPaid”的列。我需要添加一个 2nd Count 列,该列将显示已支付了多少“ClassRegistration”。

【问题讨论】:

    标签: sql join count group-by


    【解决方案1】:

    试试这个:

    SELECT 
      a.ClassName, 
      b.TeacherName, 
      COUNT(c.Class_ID),
      COUNT(CASE c.HasPaid WHEN 1 THEN c.Class_ID ELSE NULL END)
    from dbo.Class a
    inner join dbo.Teacher b 
      on a.Teacher_ID = b.Teacher_ID
    left outer join dbo.ClassRegistration c 
      on a.Class_ID = c.Class_ID
    group by a.ClassName, b.TeacherName 
    

    如果 HasPaid 的类型为 BIT,您可以通过以下方式简化秒数:

    SUM(CAST(HasPaid AS INT))
    

    【讨论】:

    • 完美!!像魅力一样工作!
    • 啊,太棒了!我已经从你的帖子中学到了很多东西。再次感谢奥列格!
    【解决方案2】:

    如果它在 SQL-Server 上,并且 HasPaid 列是 bit 类型,您可以尝试类似的方法

    SELECT a.ClassName, b.TeacherName, COUNT(c.Class_ID), SUM( CASE HasPaid WHEN 1 THEN 1 ELSE 0 END )
    from dbo.Class a
    inner join dbo.Teacher b on a.Teacher_ID = b.Teacher_ID
    left outer join dbo.ClassRegistration c on a.Class_ID = c.Class_ID
    group by a.ClassName, b.TeacherName 
    

    【讨论】:

    • 非常感谢 Max,原理和 Oleg 一样,点对点!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多