Как эффективно выполнить объединение двух запросов с группировкой и без - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть запрос, который выполняет объединение двух операторов выбора, один из которых использует group by, а другой - нет.Проблема в том, что я выбираю одни и те же столбцы и использую одинаковые функции в обоих операторах выбора.Мне кажется, что я дублирую код, и я хотел бы знать, есть ли лучший способ написать это

Я пытался использовать нормальную функцию объединения для двух операторов выбора, но оба оператора выбора используют одни и те же функции.Есть ли способ упростить следующий запрос без дублирования?

Пример:

select 
sum(col1), sum(col2)....
from table

union

select sum(col1), sum(col2)...
from table
group by class

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

Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Вы не предоставили пример данных для проверки, но одним из подходов может быть использование CASE WHEN в GROUP BY.

После UNION

SELECT Sum(col1) 
FROM   tablename 
WHERE  id <> 1 
UNION 
SELECT Sum(col1) 
FROM   tablename 
WHERE  id = 1 
GROUP  BY class 

Может быть записано какпосле использования CASE

SELECT Sum(col1) 
FROM   tablename 
GROUP  BY CASE 
            WHEN id = 1 THEN 0 
            ELSE 1 
          END 
0 голосов
/ 18 февраля 2019

Вы можете добавить предложение WITH ROLLUP к вашему GROUP BY, и оно добавит агрегированную строку в конец вашего вывода, т.е.

SELECT SUM(col1), SUM(col2)...
FROM table
GROUP BY class WITH ROLLUP
...