在SQL中跨两个表进行聚合查询?

时间:2016-04-29 06:45:09

标签: sql google-bigquery

我在BigQuery工作。我有两张桌子:

TABLE: orgs
code: STRING
group: STRING

TABLE: org_employees
code: STRING
employee_count: INTEGER

每个表中的code实际上是一个外键。我希望获得所有唯一的group,其中包含其中的组织数量,并且(这是棘手的一点)计算这些组织中有多少只有一名员工。看起来像这样的数据:

group,orgs,single_handed_orgs
00Q,23,12
00K,15,7

我知道如何做第一位,从group表中获取唯一的orgs和相关组织的计数:

SELECT
  count(code), group
FROM
  [orgs]
GROUP BY group

而且,我知道如何从练习表中获得单手组织的数量:

SELECT
  code,
  (employee_count==1) AS is_single_handed
FROM
  [org_employees]

但我不确定如何将它们粘在一起。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

  

for BigQuery:legacy SQL

SELECT
  [group], 
  COUNT(o.code) as orgs, 
  SUM(employee_count = 1) as single_handed_orgs
FROM [orgs] AS o
LEFT JOIN [org_employees] AS e
ON e.code  = o.code
GROUP BY [group]

如果org_employees表中缺少某些代码

,则使用LEFT JOIN
  

for BigQuery:标准SQL

SELECT
  grp, 
  COUNT(o.code) AS orgs , 
  SUM(CASE employee_count WHEN 1 THEN 1 ELSE 0 END) AS single_handed_orgs
FROM orgs AS o
LEFT JOIN org_employees AS e
ON e.code  = o.code
GROUP BY grp  

注意使用grp vs group - 看起来像标准的sql就像使用Reserved Keywords一样,即使我把反引号放在

  

证实:

你可以使用带有反引号的关键字

答案 1 :(得分:0)

您可以加入这两个表来获取只有一名员工的组。然后将其包装在子查询中,并计算您拥有的组。

我使用COUNT DISTINCT和GROUP BY因为我不知道您的数据是如何构建的。每组只有一行还是多行?

SELECT
    COUNT(DISTINCT group)
FROM (
    SELECT
        group
    FROM
        orgs AS o INNER JOIN org_employees AS e ON o.code = e.code
    WHERE
        employee_count = 1
    GROUP BY
        group
    )