Tes*_*ent 6 sql database count
我有这个表:
A:
id
1
2
B:
id a_id
1 1
2 1
3 1
C:
id a_id
1 1
2 1
3 2
Run Code Online (Sandbox Code Playgroud)
我需要这个结果:
A, CountB, CountC
1, 3, 2
2, 0, 1
Run Code Online (Sandbox Code Playgroud)
这个尝试不起作用:
SELECT
A.id, COUNT(B.id), COUNT(C.id)
FROM
A
LEFT JOIN
B ON A.id = B.a_id
LEFT JOIN
C ON A.id = C.a_id
GROUP BY A.id
Run Code Online (Sandbox Code Playgroud)
如果不使用相关查询,sql句子必须如何?
您的以下变体应该有效:
SELECT A.id, COUNT(distinct B.id), COUNT(distinct C.id)
FROM A LEFT JOIN
B
ON A.id = B.a_id LEFT JOIN
C
ON A.id = C.a_id
GROUP BY A.id
Run Code Online (Sandbox Code Playgroud)
然而,有些人(比如我自己)认为使用count distinct是一种警察.问题是来自B和C的行相互干扰,在连接中相乘.因此,您也可以独立完成每个连接,然后将结果放在一起:
select ab.id, cntB, cntC
from (select a.id, count(*) as cntB
from A left outer join
B
on A.id = B.a_id
group by a.id
) ab join
(select a.id, count(*) as cntC
from A left outer join
C
on A.id = C.a_id
group by a.id
) ac
on ab.id = ac.id
Run Code Online (Sandbox Code Playgroud)
仅计算,第一种形式是好的.如果您需要进行其他汇总(例如,汇总值),则通常需要拆分为组件查询.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |