2 dongjize dongjize 于 2014.12.20 23:03 提问

SQL查询使用两个COUNT,结果变为两个COUNT的乘积,求高人解释!
sql

查询语句如下:
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
到底哪里出了问题?

4个回答

guwei4037
guwei4037   Ds   Rxr 2014.12.20 23:12

不会吧,你再检查一下你的SQL语句和数据,先外连进球表看看数据是否为45.

dongjize
dongjize 只连接进球表是正常的,但再次外连接就不正常了,不解
3 年多之前 回复
caozhy
caozhy   Ds   Rxr 2014.12.21 11:46

COUNT(进球者ID)取的是记录数,不是字段数。换一句话说,count(*)和count(某个字段)应该是相等的。
你可以将这个查询作为子查询,对它进球者ID和助攻者ID分别distinct后再count。

fredrickhu
fredrickhu   Ds   Rxr 2014.12.23 14:25

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

fredrickhu
fredrickhu   Ds   Rxr 2014.12.23 14:25

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!