2016-04-29 8 views
0

私はBigQueryで作業しています。私は2つのテーブルを持っています:SQLの2つのテーブルにわたる集計クエリ?

TABLE: orgs 
code: STRING 
group: STRING 

TABLE: org_employees 
code: STRING 
employee_count: INTEGER 

各テーブルのcodeは実質的に外部キーです。私はすべてのユニークなgroupを取得したいと思います。その中に組織の数が入っていて、どれがどれだけ多くの組織に1人の従業員しか持たないのか(これはちょっとしたことです)。このようになります。データ:私は、最初のビットを行うorgsテーブルから関連するORGSのユニークgroup秒とカウントを取得する方法を知っている

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

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

そして、私はどのように知っています

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

しかし、私はそれらを一緒に接着する方法がわかりません。誰も助けることができますか?

+0

主キーの組織テーブルでは? –

+0

org_employeesには、コードごとに複数の従業員がいますか? –

+0

書込みコードは外部キーです。コードが主キーであるテーブルの名前は何ですか? –

答えて

2

:いくつかのコードがorg_employeesテーブルにBigQueryのため

が欠落している場合はLEFTはケースに参加使ってレガシー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] 

:標準SQL

grp
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 

注用 - 標準SQLはReserved Keywordsの使用のように行いますように私が確認

の周りにバッククォートを置く場合でもなります

あなたは

の周りにバッククォートでキーワードを使用することができます
+0

ありがとうございます。 – Richard

+0

@MikhailBerlyant - あなたは予約済みのキーワードのreproを提供できますか?私は、 'group'をバックテイクする次のクエリはうまくいきます:' group'を 'group'で' group'を選択してください 'グループ'によってグループ化します –

+0

何とか私が質問に答えたとき、 –

0

2人のテーブルを結合して、従業員が1人だけのグループを取得することができます。次に、これをサブクエリでラップし、所有しているグループを数えます。

データの構造がわからないため、DISTINCTとGROUP BYを使用しています。 1つのグループまたは複数のグループに1つの回線しかありませんか? BigQueryのため

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 
    ) 
関連する問題