Contar SQL cláusula where
-
27-09-2019 - |
Pregunta
Tengo la siguiente instrucción 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)
Lo que realmente necesitamos es obtener las filas donde el conteo de la posición es mayor que un número. Algo así como:
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
¿Hay alguna manera de hacer esto en SQL?
Solución
¿Qué tal esto:?
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
Otros consejos
QUE TIENE es la palabra clave que está buscando:
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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow