Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по SQL.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
960 Кб
Скачать

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

Функция COUNT несколько отличается от всех. Она считает число значений в данном столбце, или число строк в таблице. Когда она считает значения столбца, она используется с DISTINCT чтобы производить счет чисел различных значений в данном поле. Мы могли бы использовать ее, например, чтобы сосчитать количество всех имен в таблице PERSON.xxvi

SELECT COUNT ( DISTINCT PR_NAME2) FROM PERSON

В результате получаем :

COUNT

63

если бы мы не использовали DISTINCT а ввели:

SELECT COUNT (PR_NAME2) FROM PERSON

мы бы получили количество всех имен с учетом повторов

COUNT

63

COUNT примененная к значениям столбца к не может подсчитать значения NULL, если мы пожелаем подсчитать количество дней рождения в таблице PERSON то получим количество значений только с ненулевыми значениями. Введем xxvii

SELECT COUNT ( PR_BIRTHDAY) FROM PERSON

В результате получаем :

COUNT

104

т.е. количество людей у которых известна дата рождения.

Теперь применим COUNT для подсчета числа строк, в этом случае DISTINCT не используется. Найдем количество всех Татьянxxviii

SELECT COUNT(*) FROM PERSON

WHERE PR_NAME2 = 'Татьяна'

получаем

COUNT

16

Предложение group by

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

Существует два основных правила группировки.

  • Каждый столбец, включенный в неагрегатный список оператора SELECT, должен появиться в предложении GROUP BY.

  • Оператор SELECT может содержать только одно предложение GROUP BY.

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

Предложение GROUP BY располагается после предложения WHERE и перед предложением ORDER BY.

Например, предположим что вы хотите найти сколько каких имен содержится в нашем списке, при этом упорядочивая вывод по найденному количеству (по направлению от большего к меньшему), если количество будет повторяться, отсортируем список по имени:xxix

SELECT COUNT (*), PR_NAME2

FROM PERSON

GROUP BY PR_NAME2

ORDER BY 1 DESC, PR_NAME2

Получим следующий список, упорядоченный по результатам расчета функции COUNT

Листинг 14.Количество каждого имени в списке людей

COUNT

PR_NAME2

23

Елена

20

Наталья

16

Татьяна

15

Светлана

12

Марина

11

Ирина

11

Оксана

11

Ольга

10

Екатерина

9

Юлия

7

Сергей

6

Александр

6

Анна

5

Алексей

5

Дмитрий

5

Надежда

5

Олег

4

Вера

4

Людмила

4

Мария

3

Владимир

3

Ксения

3

Лариса

3

Максим

2

Анастасия

2

Вячеслав

2

Евгений

2

Илья

2

Любовь

2

Михаил

2

Семен

2

Станислав

2

Эдуард

1

Алевтина

1

Алмаз

1

Альбина

1

Амина

1

Ангелина

1

Антонина

1

Валентина

1

Валерий

1

Василий

1

Виктория

1

Галина

1

Гульнара

1

Евгения

1

Кирил

1

Константин

1

Лиана

1

Лилия

1

Марианна

1

Назгуль

1

Николай

1

Нина

1

Павел

1

Петр

1

Руслан

1

Тарас

1

Эльвира

1

Эмма

1

Юлиана

1

Юлий

1

Явар