SQL, использующий несколько агрегатных функций одновременно - PullRequest
0 голосов
/ 02 октября 2019

Мне нужна помощь с некоторыми агрегатными функциями. Мне нужно получить 3 значения из таблицы ниже. Количество инцидентов в каждом городе, количество инцидентов в каждом штате и общее количество инцидентов. Я считаю, что мне нужно получить их в одном вызове функции SQL.

STATE     CITY           Incidents    Week
AL       Birmingham         5          1
AL       Montgomery         1          1
CA       Sacramento         6          1 
CA       San Francisco      7          1
CA       Los Angeles        9          1
AL       Birmingham         4          2
AL       Montgomery         2          2
CA       Sacramento         8          2 
CA       San Francisco      5          2
CA       Los Angeles        8          2

Ответы [ 3 ]

2 голосов
/ 03 октября 2019

Использование grouping sets:

select state, city, sum(incidents)
from t
group by grouping sets ( (state), (state, city), () );

Примечание: я полагаю, вам нужно state и city вместе для строк city.

1 голос
/ 03 октября 2019

Возможно, вам лучше делать это в нескольких запросах, а не в одном запросе.

Если вы абсолютно должны сделать это в одном запросе, один из методов - использовать ROLLUP;другой метод - UNION результаты нескольких запросов.

ПРИМЕЧАНИЕ. Вы никогда не упоминали имя своей таблицы. Код ниже предполагает, что это Table

Это наш основной запрос. Достаточно просто построить, если вы понимаете GROUP BY.

SELECT State, City, SUM(Incidents)
FROM Table
GROUP BY City, State;

Использование свертки

Добавление ROLLUP просто :

SELECT State, City, SUM(Incidents)
FROM Table
GROUP BY City, State WITH ROLLUP;

Использование Union

Если вам нужно объединить запросы с UNION, вы можете сделать это следующим образом:

  1. Создайте свои запросы.
  2. Измените вашзапросы имеют одинаковое количество столбцов в аналогичном порядке
  3. Применить UNION (возможно, UNION ALL)
-- Build the three queries
-- By City
SELECT State, City, SUM(Incidents)
FROM Table
GROUP BY City, State;

-- By State
SELECT State, SUM(Incidents)
FROM Table
GROUP BY State;

-- Overall
SELECT SUM(Incidents)
FROM Table
; -- No GROUP BY!

Те же запросы, модифицированные так, чтобы иметь одинаковыеколичество столбцов и объединены с UNION:

  SELECT State, City, SUM(Incidents)
  FROM Table
  GROUP BY City, State
UNION ALL
  SELECT State, 'ALL' AS City, SUM(Incidents)
  FROM Table
  GROUP BY State
UNION ALL
  SELECT 'All States' AS State, 'ALL' AS City, SUM(Incidents)
  FROM Table
;
0 голосов
/ 02 октября 2019
select CITY, count(*)
from tbl
group by CITY
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...