繁体   English   中英

SQL 在一个查询中从不同的表中计数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM