[英]SQL Count from different tables in one Query
我认为这已经被问过一次,但不幸的是我没有找到正确的答案。
我有多个围绕客户数据的表,并且都有外键 company_id。 我的目标是有一个列表,其中第一列给我 company_id 和其他列从其他表聚合值(例如 COUNT)。 全部按 company_id 分组
例如:
company_id | COUNT(产品) | COUNT(购买)
我的方法是这样的,但没有成功,我无法下定决心(除了在 excel 中使用 vlookups)
SELECT pro.company_id, COUNT(*)
(SELECT pu.company_id, COUNT(*) FROM purchases pu GROUP BY pu.company_id) as 'COUNT(Purchases)'
FROM products pro
GROUP BY pro.company_id
我建议使用union all
和聚合:
SELECT p.company_id, SUM(is_product), SUM(is_purchase)
FROM ((SELECT pr.company_id, 1 as is_product, 0 as is_purchase
FROM products pro
) UNION ALL
(SELECT pu.company_id, 0 as is_product, 1 as is_purchase
FROM purchases pu
) pp
GROUP BY p.company_id
请注意,这会将所有产品保留在任一表中,因此结果在一个或其他列中可以有0
个计数。
聚合每个表,然后加入客户:
SELECT com.company_id, "COUNT(Purchases)", "COUNT(Products)"
from companies as com
left join
(
SELECT company_id, COUNT(*) as "COUNT(Purchases)"
FROM purchases
GROUP BY company_id
) as pu
on com.company_id = pu.company_id
left join
(
SELECT company_id, COUNT(*) as "COUNT(Products)"
FROM products
GROUP BY company_id
) as pro
如果没有客户的行,则显示 NULL,如果要返回 0,请切换到coalesce("COUNT(Products)", 0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.