2016-04-29 3 views
0

Я работаю в BigQuery. У меня есть две таблицы:Совокупный запрос по двум таблицам в SQL?

TABLE: orgs 
code: STRING 
group: STRING 

TABLE: org_employees 
code: STRING 
employee_count: INTEGER 

code в каждой таблице эффективно внешний ключ. Я хочу получить все уникальные group s, с подсчетом орг в них и (это сложный бит), подсчет количества тех из них, у которых есть только один сотрудник. Данные, выглядит следующим образом:

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

В таблице orgs, которая является первичным ключом? –

+0

В org_employees у вас есть для каждого кода несколько связанных сотрудников? –

+0

У вас есть код записи - это внешний ключ. Как называется таблица, где код является первичным ключом? –

ответ

2

для 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] 

с помощью LEFT JOIN в том случае, если некоторые коды отсутствуют в org_employees таблицах

для 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 против group - выглядит как стандартный SQL делает как использование Reserved Keywords даже если я поставить кавычку вокруг

Подтверждено:

вы можете использовать ключевое слово с обратными кавычками вокруг

+0

Большое вам спасибо. – Richard

+0

@MikhailBerlyant - можете ли вы воспроизводить зарезервированные ключевые слова. I.e., следующий запрос, который обращается к команде 'group', отлично работает: выберите' group' from (выберите 1 как 'group') группу' group' –

+0

, как-то это не сработало для меня, когда я ответил на вопрос. снова проверит –

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 
    ) 
Смежные вопросы