问题描述
- SQL查询使用两个COUNT,结果变为两个COUNT的乘积,求高人解释!
-
查询语句如下:
SELECT 球队名,号码,球员名,位置,国籍, COUNT(进球者ID) AS 进球数,COUNT(助攻者ID) AS 助攻数
FROM 球队表 A INNER JOIN 球员表 B ON A.球队缩写 = B.所属球队
LEFT OUTER JOIN 进球表 C ON B.球员ID = C.进球者ID
LEFT OUTER JOIN 助攻表 D ON B. 球员ID=D.助攻者ID
GROUP BY 球队名,号码,球员名,位置,国籍结果显示的时候,例如桑切斯9球5助攻就会变成:进球45助攻45
到底哪里出了问题?
解决方案
不会吧,你再检查一下你的SQL语句和数据,先外连进球表看看数据是否为45.
解决方案二:
COUNT(进球者ID)取的是记录数,不是字段数。换一句话说,count(*)和count(某个字段)应该是相等的。
你可以将这个查询作为子查询,对它进球者ID和助攻者ID分别distinct后再count。
解决方案三:
select a.球队名,b.号码,b.球员名,b.位置,b.国籍, c.num as 进球数,d.num as 助攻数
from 球队表 A INNER JOIN 球员表 B ON A.球队缩写 = B.所属球队
LEFT OUTER JOIN (select 进球者ID,count(1) as num from 进球表 group by 进球者ID)C ON B.球员ID = C.进球者ID
LEFT OUTER JOIN (select 助攻者ID,count(1) as num from 助攻表 group by 助攻者ID)D ON B. 球员ID=D.助攻者ID
解决方案四:
select a.球队名,b.号码,b.球员名,b.位置,b.国籍, c.num as 进球数,d.num as 助攻数
from 球队表 A INNER JOIN 球员表 B ON A.球队缩写 = B.所属球队
LEFT OUTER JOIN (select 进球者ID,count(1) as num from 进球表 group by 进球者ID)C ON B.球员ID = C.进球者ID
LEFT OUTER JOIN (select 助攻者ID,count(1) as num from 助攻表 group by 助攻者ID)D ON B. 球员ID=D.助攻者ID