В WHERE формируется условие соединения таблиц, либо условие выбора строк.
Пример:
SELECT Фамилия, Оклад, Премия
FROM Сотрудники
WHERE Премия > 0,25*Оклад
Пример. Получить список инженеров в убывающем порядке отношения Премия/Оклад:
SELECT Фамилия, Оклад, Премия, Премия/Оклад
FROM Сотрудники
ORDER BY Премия/Оклад,DESC
К группам строк , извлеченным в результате запроса можно применить групповые функции:
AVG, COUNT, MAX, MIN, SUM
Пример. Определить средний оклад экономистов:
SELECT AVG(Оклад)
FROM Сотрудники
WHERE Должность = ‘Экономист’
Пример. Определить общий оклад и общую премию у всех инженеров:
SELECT SUM(Вклад), SUM(Премия)
FROM Сотрудники
WHERE Должность = ‘Инженер’
Групповые функции могут быть использованы в аналитических выражениях.
Пример:
SELECT AVG(Оклад+Премия)*12
FROM Сотрудники
WHERE Должность = ‘Инженер’
Пример. Определить в организации минимальные и максимальные оклады, и их разницу:
SELECT MAX(Оклад) , MIN(Оклад), MAX(Оклад) - MIN(Оклад) AS Результат
Замечание. Список выборки предложения SELECT, состоящий из групповых функций, должен содержать имена столбцов, только как атрибуты групповых функций.
Пример. Получить фамилию и оклад сотрудника с максимальным окладом, используя подзапрос:
SELECT Фамилия, Оклад
FROM Сотрудники
WHERE Оклад = ( SELECT МАХ(Оклад) FROM Сотрудники)
Тот же результат выдаст и следующий запрос:
SELECT Фамилия, MAX(Оклад).
Пример. Подсчитать количество сотрудников 30-го отдела, получающих премию:
SELECT COUNT(Премия)
FROM Сотрудники
WHERE Отдел = 30 AND (Премия >0 OR Премия NOT NULL)
COUNT можно использовать со словом DISTINCT
Пример. Подсчитать количество должностей сотрудников 30-го отдела:
SELECT COUNT (DISTINCT Должность)
FROM Сотрудники
WHERE Отдел = 30
COUNT(*) подсчитывает количество строк, удовлетворяющих условиям поиска выбора.
Пример:
SELECT COUNT(*)
FROM Сотрудники
WHERE Отдел = 30
Использование агрегативных функций в запросе вместе с операндом GROUP BY.
GROUP BY служит для выборки итоговых данных по группам:
Пример. Определить средний оклад сотрудников отделов № 10, №20, №30:
SELECT AVG(Оклад)
FROM Сотрудники
GROUP BY Отдел = 10 (20,30)
GROUP BY делит таблицу на группу строк с совпадающими значениями в одном и том же столбце или столбцах.
Пример. Выбрать номера отделов и средний оклад по отделу:
SELECT Отдел AVG(Оклад)
FROM Сотрудники
GROUP BY Отдел
Если в запросе используется GROUP BY, то в предложении SELECT вместе с групповыми функциями можно указать групповой столбец, поскольку значения в групповом столбце являются атрибутом группы строк (например, у всей группы один номер отдела, так как строки группируются по отделу).
Предложение GROUP BY всегда должно следовать за WHERE, если оно есть, а если WHERE нет – то за FROM
Для распределения строк по группам можно использовать значения столбцов.
Пример:
SELECT Отдел, Должность, COUNT(*), AVG(Оклад)
FROM Сотрудники
GROUP BY Отдел, Должность
В одном запросе совместно с групповыми функциями можно использовать условия соединения таблиц. Например, добавим в предыдущий пример номер отдела и название отдела .