簡體   English   中英

匯總查詢在SQL中的兩個表?

[英]Aggregate query across two tables in SQL?

我在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

我知道如何做第一件事,從orgs表中獲取唯一的group和關聯的org的數量:

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

而且,我知道如何從練習表中獲取單手組織的數量:

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

但是我不確定如何將它們粘合在一起。 有人可以幫忙嗎?

適用於BigQuery:舊版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

適用於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不喜歡使用的保留關鍵字 ,即使我把周圍的反引號

已確認:

您可以將關鍵字與反引號一起使用

您可以將兩個表合並以得到只有一名員工的組。 然后,將其包裝在子查詢中,然后對擁有的組進行計數。

我使用的是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
    )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM