SQL 服务器:在使用聚合运算符 COUNT() 时从左 table 打印所有行
SQL Server : printing all the rows from left table while using aggregate operator COUNT()
我正在尝试编写一个查询,如果一个团队中的所有球员都得分,则 returns 每个得分少于 10 分的球队中 TotalPlayers
的计数为 [LowScoringPlayers]
超过 10 次运行,我仍然需要打印 TeamName
和 0 作为该团队的 [LowScoringPlayers]
。
我的以下查询给出了正确的计数,但如果球队中没有得分低于 10 分的球员,那么它会跳过打印 TeamName
。
SELECT DISTCINT
(TM.[TeamId]), TM.[TeamName],
COUNT(DISTINCT S.[PlayerId]) AS [LowScoringPlayers]
FROM
dbo.[Teams] TM
INNER JOIN
dbo.[Player] PL ON PL.[PlayerId] = TM.[TeamId]
INNER JOIN
dbo.[ScoreAudit] S ON S.[PlayerId] = PL.[PlayerId] AND S.[Runs] <= 10
GROUP BY
TM.[TeamId], TM.[TeamName]
如果我删除条件 S.[Runs] <=10
,查询将打印所有团队名称。我能想到的一种方法是在 S.[Runs] <=10
之前使用 case 语句,但数据量很大,因此可能是性能问题。
还有其他更好的方法吗?
在查询中使用 LEFT JOIN
。所以,解决方案可以是:
SELECT DISTINCT TM.TeamId, TM.TeamName, COUNT(DISTINCT S.PlayerId) AS LowScoringPlayers
FROM dbo.Teams TM
LEFT JOIN dbo.Player PL
ON PL.PlayerId = TM.TeamId
LEFT JOIN dbo.ScoreAudit S
ON S.PlayerId = PL.PlayerId AND S.Runs <=10
GROUP BY TM.TeamId, TM.TeamName
我正在尝试编写一个查询,如果一个团队中的所有球员都得分,则 returns 每个得分少于 10 分的球队中 TotalPlayers
的计数为 [LowScoringPlayers]
超过 10 次运行,我仍然需要打印 TeamName
和 0 作为该团队的 [LowScoringPlayers]
。
我的以下查询给出了正确的计数,但如果球队中没有得分低于 10 分的球员,那么它会跳过打印 TeamName
。
SELECT DISTCINT
(TM.[TeamId]), TM.[TeamName],
COUNT(DISTINCT S.[PlayerId]) AS [LowScoringPlayers]
FROM
dbo.[Teams] TM
INNER JOIN
dbo.[Player] PL ON PL.[PlayerId] = TM.[TeamId]
INNER JOIN
dbo.[ScoreAudit] S ON S.[PlayerId] = PL.[PlayerId] AND S.[Runs] <= 10
GROUP BY
TM.[TeamId], TM.[TeamName]
如果我删除条件 S.[Runs] <=10
,查询将打印所有团队名称。我能想到的一种方法是在 S.[Runs] <=10
之前使用 case 语句,但数据量很大,因此可能是性能问题。
还有其他更好的方法吗?
在查询中使用 LEFT JOIN
。所以,解决方案可以是:
SELECT DISTINCT TM.TeamId, TM.TeamName, COUNT(DISTINCT S.PlayerId) AS LowScoringPlayers
FROM dbo.Teams TM
LEFT JOIN dbo.Player PL
ON PL.PlayerId = TM.TeamId
LEFT JOIN dbo.ScoreAudit S
ON S.PlayerId = PL.PlayerId AND S.Runs <=10
GROUP BY TM.TeamId, TM.TeamName