【问题标题】:SQL Count where clauseSQL Count where 子句
【发布时间】:2010-08-09 14:14:30
【问题描述】:

我有以下 SQL 语句:

 SELECT        [l.LeagueId] AS LeagueId, [l.LeagueName] AS NAME, [lp.PositionId]
 FROM            (Leagues l INNER JOIN
                     Lineups lp ON l.LeagueId = lp.LeagueId)
 WHERE        (lp.PositionId = 1) OR
                     (lp.PositionId = 3) OR
                     (lp.PositionId = 2)

我真正需要的是获取位置计数大于数字的行。比如:

 SELECT        [l.LeagueId] AS LeagueId, [l.LeagueName] AS NAME, [lp.PositionId]
 FROM            (Leagues l INNER JOIN
                     Lineups lp ON l.LeagueId = lp.LeagueId)
 WHERE        Count(lp.PositionId = 1) > 2 OR
                     Count(lp.PositionId = 3) > 6 OR
                     Count(lp.PositionId = 2) > 3

有没有办法在 SQL 中做到这一点?

【问题讨论】:

  • 所以,我在下面使用了 Cade Roux 的解决方案,但是有谁知道为什么,当我将 HAVING 从 OR 语句更改为 AND 语句时,我得到零结果?如果我只使用一个 SUM(CASE..) 语句,我会得到结果,但如果我结合两个有效的语句,我会得到零个结果。

标签: sql join count where-clause having


【解决方案1】:

这个怎么样?

SELECT        [l.LeagueId] AS LeagueId, [l.LeagueName] AS NAME
 FROM            (Leagues l INNER JOIN
                     Lineups lp ON l.LeagueId = lp.LeagueId)
 GROUP BY [l.LeagueId], [l.LeagueName]
 HAVING        SUM(CASE WHEN lp.PositionId = 1 THEN 1 ELSE 0 END) > 2 OR
                     SUM(CASE WHEN lp.PositionId = 3 THEN 1 ELSE 0 END) > 6 OR
                     SUM(CASE WHEN lp.PositionId = 2 THEN 1 ELSE 0 END) > 3

【讨论】:

    【解决方案2】:

    HAVING 是您要查找的关键字:

    SELECT        [l.LeagueId] AS LeagueId, [l.LeagueName] AS NAME, [lp.PositionId]
    FROM            (Leagues l INNER JOIN
                         Lineups lp ON l.LeagueId = lp.LeagueId)
    GROUP BY lp.PositionId, l.LeagueName
    HAVING lp.PositionId = 1 AND COUNT(*) > 2 
           OR lp.PositionId = 2 AND COUNT(*) > 3 
           OR lp.PositionId = 3 AND COUNT(*) > 6 
    

    【讨论】:

      猜你喜欢
      • 2012-07-03
      • 1970-01-01
      • 2012-08-12
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多