Группировка и агрегирование данных совершаются с помощью функций, определенных в MySQL. Описание некоторых функций дано в табл.14.
Таблица 14. Функции MySQL
Название
Описание
AVG (столбец)
Средняя величина значений в определенном столбце
COUNT ( элементы)
При указании столбца выдается число ненулевых значений в этом столбце. Если перед именем столбца указать DISTINCT, то выдается только количество неодинаковых значений
MIN (столбец)
Минимальное значение в столбце
МАХ (столбец)
Максимальное значение в столбце
SUM (столбец)
Сумма значений в столбце
Агрегатные функции указываются подобно именам полей в запросе SELECT, но сами они используют имена поля в качестве аргументов. SUM и AVG могут обрабатывать только числовые поля. С функциями COUNT, MAX и MIN могут использоваться и числовые, и символьные поля. Например, чтобы определить количество водителей в автопарке, можно запросить
mysql>SELECT COUNT(id) FROM drivers;
Если надо узнать, сколько водителей работало за отчетное время, то подойдет команда
mysql>SELECT COUNT (DISTINCT driver_number) FROM timetable;
Функция count (*) посчитает число строк в таблице, но если указать count (field) — посчитать значения в поле field, в котором есть значения NULL, то пустые поля учтены не будут.
Предложение GROUP BY позволяет определять подмножество значений в особом поле в терминах другого поля и применять функцию агрегата к подмножеству. Это дает вам возможность объединять поля и агрегатные функции в едином предложении SELECT.
Посчитаем, сколько автомобилей есть в таксопарке, сгруппировав данные по моделям:
mysql>SELECT model, COUNT(model) FROM carsGROUP BY model;
Каждая группа состоит из строк с одинаковым значением поля model. Результат запроса представлен на рис. 8.
Рис. 8. Упорядочение результатов запроса
Таблицы – это неупорядоченные наборы данных, и выборка из них не обязательно появляется в какой-то определенной последовательности. Для извлечения данных в определенном порядке используется конструкция ORDER BY.
Упорядочим сведения о водителях по дате рождения:
mysql>SELECT * FROM drivers ORDER BY birth;
В полученной выборке список откроют старшие водители. Если требуется упорядочить данные по убыванию, следует использовать ключевое слово DESC (от англ, descending — по убыванию):
mysql>SELECT * FROM drivers ORDER BY birth DESC;
Конструкция LIMIT служит для указания, сколько строк результата следует отображать. Если надо найти двух самых пожилых водителей, то можно применить такую команду:
mysql>SELECT * FROM drivers ORDER BY birth LIMIT 2;
Можно использовать два параметра: номер строки, с которой следует начать, и количество строк.
mysql>SELECT family_name FROM drivers LIMIT 2,3;
Последний запрос можно интерпретировать так: "Выбрать фамилии водителей, в результате отобразить три строки, начиная со строки 2". Нумерация строк начинается с нуля.