Kir*_*ill 1 sql group-by left-join
我有一个按人返回帐户计数的查询
SELECT p.id, COUNT(a.id) accounts
FROM Person p
LEFT JOIN Account a
ON a.person_id = p.id
WHERE p.id = 1
GROUP BY p.id;
Run Code Online (Sandbox Code Playgroud)
它可以找到。如果该人有两个帐户,则返回 2。但我还需要获得活跃帐户数。我尝试这样做:
SELECT p.id, COUNT(a.id) accounts, COUNT(a1.id) active_accounts
FROM Person p
LEFT JOIN Account a
ON a.person_id = p.id
LEFT JOIN Account a1
ON a1.person_id = p.id AND a1.state = '0'
WHERE p.id = 1
GROUP BY p.id;
Run Code Online (Sandbox Code Playgroud)
但此查询返回帐户 4,而不是 2。我该如何修复此查询?
您的查询产生笛卡尔积,每个帐户都与其他帐户连接
您需要一个连接:
SELECT
p.id,
COUNT(a.id) total_accounts,
sum(case when a1.state = '0' then 0 else 1 end) inactive_accounts,
sum(case when a1.state = '0' then 1 else 0 end) active_accounts
FROM Person p
LEFT JOIN Account a
ON a.person_id = p.id
WHERE p.id = 1
GROUP BY p.id;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2463 次 |
| 最近记录: |