代码之家  ›  专栏  ›  技术社区  ›  Kris B

SQL Count where子句

  •  5
  • Kris B  · 技术社区  · 15 年前

    我有以下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中有什么方法可以做到这一点吗?

    2 回复  |  直到 15 年前
        1
  •  9
  •   Cade Roux    15 年前

    这个怎么样

    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
  •  7
  •   Scott Stafford    15 年前

    “拥有”是您要查找的关键字:

    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