从连接查询中选择2个计数

时间:2014-02-04 09:38:26

标签: mysql sql postgresql join aggregate-functions

此查询始终返回与num_of_users相同的“num_of_accounts” 但如果我用lists_user_assignment删除第二个连接 num_of_accounts是正确的

  select lists.*, count(lists_account_assignment.id) as num_of_accounts, count(lists_user_assignment.id) as num_of_users
from lists
left join lists_account_assignment on lists.id = lists_account_assignment.lists_id
left join lists_user_assignment on lists.id = lists_user_assignment.lists_id
where lists.tenant_id = 1
group by lists.id

不确定这是否是在查询中获得2个计数的正确方法。此外,如果此查询将是昂贵的或不。非常感谢帮助。

2 个答案:

答案 0 :(得分:0)

试试这个..

SELECT      L.*, count(Acc.id) AS NoOfAccounts
FROM        lists L
LEFT JOIN   lists_account_assignment Acc
ON          L.id = Acc.lists_id
LEFT JOIN   lists_user_assignment U
ON          L.id = U.lists_id
AND         L.tenant_id = 1  
GROUP BY    L.id

答案 1 :(得分:0)

尝试使用COUNT(DISTINCT ..): -

SELECT lists.*, 
       Count(DISTINCT lists_account_assignment.id) AS num_of_accounts, 
       Count(DISTINCT lists_user_assignment.id)    AS num_of_users 
FROM   lists 
       LEFT JOIN lists_account_assignment 
              ON lists.id = lists_account_assignment.lists_id 
       LEFT JOIN lists_user_assignment 
              ON lists.id = lists_user_assignment.lists_id 
WHERE  lists.tenant_id = 1 
GROUP  BY lists.id 
相关问题