我在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]
但我不确定如何将它们粘在一起。有人可以帮忙吗?
答案 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 JOINfor 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
)