WHERE PublYear IS NULL;
4. Раздел GROUP BY. Предназначен для группировки записей и вычисления для них агрегатных (статистических) функций. Группировка происходит по одному или нескольким полям, объединяются записи с одинаковым значением полей. Кроме полей для группировки выделяются поля, для которых будет вычислена агрегатная функция.
Агрегатные функции выполняют вычисление на наборе значений и возвращают одиночное значение. Все они, за исключением COUNT, не учитывают значение NULL. В T-SQL используются следующие основные функции:
AVG – среднее арифметическое группы значений;
SUM – сумма значений;
MIN – минимальное значение;
MAX – максимальное значение;
COUNT – количество элементов в выборке.
Агрегатные функции могут использоваться без раздела GROUP BY. Например, можно посчитать, сколько в БД фильмов:
SELECT COUNT(FilmCompany)
FROM Films;
Если нужно узнать более подробную информацию, например, сколько фильмов вышло в каждом году, значения придется сгруппировать по полю «год выпуска». Поля, по которым происходит группировка, не обязаны присутствовать в списке выборки (в разделе SELECT поле PublYear можно не использовать). Однако, наоборот, любое поле, которое входит в список выборки и не является агрегатной функцией, обязано входить в раздел GROUP BY.
SELECT PublYear, COUNT(FilmID) as Fcount
FROM Films
GROUP BY PublYear;
Подсчитать среднюю продолжительность фильмов компании New Line Cinema:
SELECT FilmCompany, AVG(Duration) AS Favg
FROM Films
WHERE FilmCompany = 'New Line Cinema'
GROUP BY FilmCompany;
5. Раздел HAVING. Аналогичен разделу WHERE, но используется только в сочетании с GROUP BY (в WHERE нельзя использовать агрегатные функции). Предназначен для фильтрации записей.
Выбрать кинокомпании, которые сняли больше двух фильмов.
Такая запись невозможна:
SELECT FilmCompany
FROM Films
WHERE COUNT(FilmID) > 2
GROUP BY FilmCompany;
Возможная запись:
SELECT FilmCompany
FROM Films
GROUP BY FilmCompany
HAVING COUNT(FilmID) > 2;
В разделе HAVING могут использоваться либо агрегатные функции, либо поля, содержащиеся в разделе GROUP BY.
Выбрать все кинокомпании, которые сняли больше двух фильмов после 2000 года.
Такая запись невозможна:
SELECT FilmCompany
FROM Films
GROUP BY FilmCompany
HAVING COUNT(FilmID) > 2 AND PublYear > 2000;
Возможная запись:
SELECT FilmCompany
FROM Films
WHERE PublYear > 2000
Дата добавления: 2018-09-24; просмотров: 248;