【问题标题】:SQL Count from different tables in one Query一个查询中不同表的 SQL 计数
【发布时间】:2021-03-26 14:52:31
【问题描述】:

我认为这个问题已经被问过一次,但不幸的是我没有找到正确的答案。

我有多个围绕客户数据的表,并且都有外键 company_id。我的目标是有一个列表,其中第一列给我 company_id 和其他列的聚合值(例如 COUNT)来自其他表。全部按 company_id 分组

例如:

公司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

【问题讨论】:

  • 跳过 subqeury 中的 GROUP BY,而是放置一个引用 pro 表的 WHERE 子句条件。
  • 用您正在使用的数据库标记问题。
  • @GordonLinoff 谢谢!这比预期的要容易......不幸的是,我不明白你建议我的 union_all 方法????因此,我很高兴这也能正常工作

标签: sql count


【解决方案1】:

我建议使用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 计数。

【讨论】:

    【解决方案2】:

    聚合每个表,然后加入客户:

    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)

    【讨论】:

    • 谢谢!这对我很有效:) 我想知道如果您从公司表中查询聚合值并将 COUNT(Purchases) 和 COUNT(Products) 添加到其中,您会做些什么不同的事情?
    • 我不明白你到底想做什么,但你可以很容易地添加一个 GROUP BY 到外部选择和sum("COUNT(Purchases)")
    • 好的,让我再试一次。当我尝试将 GROUP BY 添加到另一个 select 语句时,它不起作用。这就是我问的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2022-10-08
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多