【发布时间】:2021-04-01 15:19:28
【问题描述】:
我有两个独立工作的查询,但组合时会抛出不正确的结果;
查询 1:
SELECT
ID,
(FirstName || " " || Surname) AS Player,
COUNT (PlayerMatch.PlayerID) AS 'Matches',
SUM (PlayerMatch.MinuteOff - PlayerMatch.MinuteOn) AS 'Mins',
SUM (PlayerMatch.Shots) AS 'Shots',
SUM (PlayerMatch.ShotOnTarget) AS 'On Target',
ROUND (1.0 * SUM (PlayerMatch.ShotOnTarget) / SUM (PlayerMatch.Shots), 2) AS 'Shots on target'
FROM
Players
LEFT JOIN
PlayerMatch ON PlayerMatch.PlayerID = Players.ID
GROUP BY
Players.ID
HAVING
COUNT (PlayerMatch.PlayerID) > 0;
和查询 #2:
SELECT
ID,
(FirstName || " " || Surname) AS Player,
COUNT (Goals.ScorerID) AS 'Goals',
FROM
Players
LEFT JOIN
Goals ON Goals.ScorerID = Players.ID
GROUP BY
Players.ID
HAVING
COUNT (Goals.ScorerID) > 0
ORDER BY
COUNT (Goals.ScorerID) DESC;
当这样组合时:
SELECT
ID,
(FirstName || " " || Surname) AS Player,
COUNT (PlayerMatch.PlayerID) AS 'Matches',
SUM (PlayerMatch.MinuteOff - PlayerMatch.MinuteOn) AS 'Mins',
SUM (PlayerMatch.Shots) AS 'Shots',
SUM (PlayerMatch.ShotOnTarget) AS 'On Target',
COUNT (Goals.ScorerID) AS 'Goals',
ROUND (1.0 * SUM (PlayerMatch.ShotOnTarget) / SUM (PlayerMatch.Shots), 2) AS 'Shots on target'
FROM
Players
LEFT JOIN
PlayerMatch ON PlayerMatch.PlayerID = Players.ID
LEFT JOIN
Goals ON Goals.ScorerID = Players.ID
GROUP BY
Players.ID
HAVING
COUNT (PlayerMatch.PlayerID) > 0
AND COUNT (Goals.ScorerID) > 0
ORDER BY
COUNT (Goals.ScorerID) DESC;
专栏
COUNT (Goals.ScorerID) AS 'Goals',
返回正确数量的结果,但返回错误的详细信息。
非常感谢任何帮助。
【问题讨论】:
-
请用您正在运行的数据库标记您的问题:mysql、oracle、postgres...?
标签: sql sqlite count sum left-join