2016-10-31 2 views
0

Я хочу сделать доклад с результатами из разных таблицправила подзапрос в функции союза postgesql

SELECT week, countA, countB 
FROM (
(SELECT week, COUNT(*) AS countA FROM dataA a 
GROUP BY 1) 
UNION 
(SELECT week , COUNT(*) AS countB FROM dataB 
    WHERE blablabla ... GROUP BY 1) b 
) c 

теперь у меня есть некоторые проблемы

  • он не хочет, что подзапрос б имеет имя

  • он не знает, что countB есть, если я не дам 2-й запрос, имя

  • я запутаться и не знаю, и где я должен поставить имя для 2-го запроса

Является ли их решение, что и является их своего рода «Rulebook», потому что я запутаться каждый раз, когда Я работаю с функцией UNION

+1

BTW: UNION не является функцией. Это оператор (который склеивает два табличных выражения, давая одно табличное выражение) – joop

+0

Существует «справочник». Это называется «руководство»: https://www.postgresql.org/docs/current/static/sql-select.html#SQL-UNION –

ответ

0
SELECT test, counter 
    FROM (
    (SELECT test, COUNT(*) AS counter FROM tableA 
    GROUP BY 1) 
    UNION 
    (SELECT test , COUNT(*) AS counter FROM tableB 
    WHERE test <> 0 GROUP BY 1) 
    ) c 

Вам не нужно указывать запросы, объединение объединяет две таблицы с одинаковыми столбцами вместе. Но он не объединяет две таблицы, где разные столбцы. Поэтому вам нужно, чтобы счетчики назывались равными. Таким образом, у вас есть два столбца test и counter from tableA и tableB.

+0

Да, но забыл, что функция Union делает это, и я переопределяю эту свою задачу UNION не так полезен, но большое спасибо за ваш ответ. –

+0

Вам действительно не нужны столбцы второго запроса в объединении, чтобы иметь те же имена, что и первый. Имена столбцов результата определяются только самым первым запросом. –

0

Вы можете упростить этот запрос, как это сделать:

SELECT test, COUNT(*) AS counter FROM tableA 
GROUP BY 1 
UNION 
SELECT test , COUNT(*) AS counter FROM tableB 
WHERE test <> 0 GROUP BY 1 

Колонки не должны иметь такое же имя. Пока они «совместимы с профсоюзом» (в двух словах, те же типы или типы, которые могут быть повышены друг к другу). Имя столбцов в результирующей таблице будет таким же, как в первом запросе на выбор.

Смежные вопросы