MySQL
Агрегатные функции
Операторы группировки
Агрегатные функции
Агрегатные функции вычисляют единое результирующее значения в наборе строк.
Эти функции принимают в качестве параметра выражение, которое представляет критерий для определения значений.
В качестве выражения выступает название столбца, над значениями которого надо проводить вычисления.
Агрегатные функции
COUNT(*) - вычисляет количество записей (рядов) в выборке
COUNT - вычисляет количество записей по определенному столбцу (полю)
SUM - вычисляет сумму значений в указанном столбце
AVG - вычисляет среднее значение в указанном столбце
MIN - вычисляет минимальное значение по столбцу
MAX - вычисляет максимальное значение по столбцу
Выражения в функциях AVG и SUM должно представлять числовое значение.
Выражение в функциях MIN, MAX и COUNT может представлять числовое или строковое значение.
Операторы GROUP BY и HAVING
Операторы GROUP BY и HAVING позволяют сгруппировать данные.
Оператор GROUP BY используется в запросе SELECT для сбора данных по нескольким записям и группировки результатов по одному или нескольким полям (столбцам).
То есть GROUP BY определяет, как строки будут группироваться.
Запрос с применением GROUP BY, имеет следующий вид:
SELECT поле_1, поле_2, ... поле_N
FROM имя_таблицы
WHERE [условие]
GROUP BY поле_1, поле_2, ... поле_N
ORDER BY поле_1, поле_2, ... поле_N;
Ключевое слово HAVING используется для того, чтобы определить условия, по которым записи будут отфильтрованы после выполнения запроса.
Оператор HAVING позволяет выполнить фильтрацию групп, то есть определяет, какие группы будут включены в выходной результат.
То есть HAVING определяет, как записи(строки) будут фильтроваться.
SELECT поле_1, поле_2, ... поле_N
FROM таблица_1, таблица_2
WHERE [условие]
GROUP BY поле_1, поле_2, ... поле_N
HAVING [условия]
ORDER BY поле_1, поле_2, ... поле_N;
Оператор AS
С помощью оператора AS имена полей (столбцов) в запросах можно переименовывать .
Это придает результатам более читабельный вид:
SELECT имя_поля AS псевдоним FROM ... ;
Примеры запросов
Таблица workers из базы данных newDB:
COUNT
Число записей в выборке
SELECT COUNT(*) FROM workers;
- выведет: [COUNT(*)] => 12
Число записей по определенному столбцу (полю)
SELECT COUNT(specialty) FROM workers;
- выведет: [COUNT(specialty)] => 12
GROUP BY, AS
SELECT name FROM workers GROUP BY name;
- выведет имена работников в алфавитном порядке
Количество работников по специальностям (Quantity)
SELECT specialty, COUNT(*) AS quantity FROM workers GROUP BY specialty;
- выведет количество работников, сгруппированные по специальностям,
при этом для получаемого значения устанавливается псевдоним "quantity"
Средняя зарплата по категориям работников
SELECT specialty, AVG(salary) FROM workers GROUP BY specialty;
- выведет среднюю зарплату, для каждой категории работников
Средняя зарплата и средний возраст по категориям работников
SELECT specialty, AVG(salary), AVG(age) FROM workers GROUP BY specialty;
- выведет среднюю зарплату и средний возраст, для каждой категории работников
Максимальная зарплата по категориям (maximum_salary - Максимальная зарплата)
SELECT specialty, MAX(salary) FROM workers GROUP BY specialty;
или
SELECT specialty, MAX(salary) AS 'Максимальная зарплата' FROM workers GROUP BY specialty;
- в обоих случаях выведет максимальную зарплату для каждой категории работников
при этом во втором случае для получаемого значения устанавливается
псевдоним "Максимальная зарплата"
HAVING
Средняя зарплата по категориям, при этом вывести те категории работников, у которых средняя зарплата больше 30000
SELECT specialty, AVG(salary) FROM workers GROUP BY specialty HAVING AVG (salary) > 30000;
- выведет: ... [specialty] => инженер [AVG(salary)] => 60000.0000 ...
... [specialty] => начальник [AVG(salary)] => 85000.0000 ...
Комбинирование функций
SELECT COUNT(*) AS 'Количество работников',
MIN(salary) AS 'Минимальная зарплата',
MAX(salary) AS 'Максимальная зарплата',
AVG(salary) AS 'Средняя зарплата',
FROM workers;
- выведет: [Количество работников] => 12 [Минимальная зарплата] => 10000
[Максимальная зарплата] => 100000 [Средняя зарплата] => 36000.0000
Наверх Наверх