Команда GROUP BY

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

Пример 1. Необходимо определять наименьшую оценку, полученную каждым студентом.

SELECT SNUM, MIN (OCENKA)

FROM USP;

GROUP BY SNUM;

Результат запроса:

SNUM

----------------

3412 4

3413 4

3414 3

3416 5

Замечание 1: Последний столбец без наименования, потому что это столбец вывода, а не столбец извлечения данных из таблицы.

Замечание 2: Допускается использование одновременно с несколькими полями.

Замечание 3: Нельзя использовать агрегатную функцию от агрегатной функции.

Пример 2. Вывести наименьшее значение оценки за каждый день.

SELECT SNUM, UDATE, MIN(OCENKA)

FROM USP

GROUP BY SNUM,UDATE;

Результат запроса:

SNUM UDATE

--------------------------------------

3412 10/06/1999 5

3412 12/06/1999 4

3413 10/06/1999 4

3414 11/06/1999 3

3416 12/06/1999 5

Предложение HAVING.

Предложение HAVING определять категории, используемые для удаления определенных групп из вывода, наподобие тому, как это делает предложение WHERE для индивидуальных строк.

Пример 1. Вывести наименьшую оценку, меньшую 5.

SELECT SNUM, UDATE, MIN (OCENKA)

FROM USP

GROUP BY SNUM,UDATE

HAVING MIN (OCENKA) < 5;

Результат запроса:

SNUM UDATE

-----------------------------------------

3412 12/06/1999 4

3413 10/06/1999 4

3414 11/06/1999 3

После UDATE не может быть вызвано предложением HAVING, потому что оно может иметь больше чем значение на группу вывода, следовательно, для изображение такой ситуации, предложение HAVING должно ссылаться только на агрегатные функции и поля, выбранные в GROUP BY.

Аргументы в предложении HAVING подчиняется тем же самым правилам, что и в предложении SELECT, состоящем из команд, использующих GROUP BY: они должны иметь одно значение на групп вывода.

Пример 2. Вывести наименьшую оценку, полученную 10/06/1999.

SELECT SNUM, MIN (OCENKA)

FROM USP

WHERE UDATE= 10/06/1999

GROUP BY SNUM;

Результат запроса:

SNUM

-------------

3412 5

3413 4

Пример 3. вывести наименьшую оценку для студентов с номерами 3412 и 3413.

SELECT SNUM, MIN (OCENKA)

FROM USP

GROUP BY SNUM

HAVING SNUM IN (3412, 3413);

Результат запроса:

SNUM

----------------

3412 4

3413 4

Замечание: нельзя использовать агрегатную функцию от агрегатной функции.


Сортировка результатов запроса.

Индексирование записей.

SQL позволяет помещать выражения и константы среди выбранных полей. Эти выражения могут дополнять или замещать поля в предложениях SELECT, при этом они могут включать в себя одно или более выбранных полей.

Пример 1.В таблице STUDENTS проиндексировать стипендию.

SELECT SFAM, SIMA, SOTCH, STIP*2

FROM STUDENTS;

Результат запроса:

SFAM SIMA SOTCH

------------------------------------------------------------------------


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: