Я не уверен, что цель "группы по" здесь - PullRequest
0 голосов
/ 13 октября 2011

Я пытаюсь понять, что делает этот запрос:

SELECT branch_name, count(distinct customer_name)
FROM depositor, account
WHERE depositor.account_number = account.account_number
GROUP BY branch_name

Зачем нужен GROUP BY?

Ответы [ 4 ]

6 голосов
/ 13 октября 2011

Вы должны использовать GROUP BY, чтобы таким образом использовать функцию агрегирования, например COUNT (используя функцию агрегирования для агрегирования данных, соответствующих одному или нескольким значениям в таблице).

Запрос по существу выбирает различные branch_name s, используя этот столбец в качестве столбца группировки, затем в группе он считает различные customer_name s.

Вы не можете использовать COUNT, чтобы получитьколичество различных customer_name с на branch_name без предложения GROUP BY (по крайней мере, не с простой спецификацией запроса - вы можете использовать другие средства, объединения, подзапросы и т. д.).

3 голосов
/ 13 октября 2011

Это дает вам общее количество отдельных клиентов для каждого филиала; GROUP BY используется для группировки функции COUNT.
Это может быть записано также как:

SELECT branch_name, count(distinct customer_name)
FROM depositor INNER JOIN account
ON depositor.account_number = account.account_number
GROUP BY branch_name
2 голосов
/ 13 октября 2011

Давайте на шаг отойдем от SQL и рассмотрим язык реляционного обучения Учебное пособие D .

Поскольку два отношения (таблицы) объединены в общем атрибуте (столбце)) name account_number, мы можем использовать естественное соединение:

depositor JOIN account

(поскольку результатом является отношение, которое по определению имеет только различные кортежи (строки), нам не нужно DISTINCTключевое слово.)

Теперь нам просто нужно агрегировать, используя SUMMARIZE..BY:

SUMMARIZE (depositor JOIN account) 
   BY { branch_name } 
      ADD ( COUNT ( customer_name ) AS customer_tally )

В SQLland GROUP BY branch_name делает то же самое, что и SUMMARIZE..BY { branch_name }.Поскольку SQL имеет очень жесткую структуру, столбец branch_name необходимо повторить в предложении SELECT.

2 голосов
/ 13 октября 2011

Если вы хотите COUNT что-то (см. SELECT -Часть оператора), вы должны использовать GROUP BY, чтобы указать запросу, что агрегировать. Оператор GROUP BY используется вместе с агрегатными функциями для группировки набора результатов по одному или нескольким столбцам.

Пренебрежение этим приведет к ошибкам SQL в большинстве СУБД или бессмысленным результатам в других.

Полезная ссылка: http://www.w3schools.com/sql/sql_groupby.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...