Поиск

Функции и модификаторы, применяемые в конструкции GROUP BY

 Агрегатные функции GROUP BY

Если вы используете групповую функцию в операторе, содержащем конструкцию GROUP by, это эквивалентно группировке всех строк.
  • AVG (выражение). Возвращает среднее значение выражения, указанного в аргументе выражение.
    mysql> SELECT student__name, AVG(test_score) -> FROM student -> GROUP BY studentjiame;
  • BITAND (выражение). Возвращает результат поразрядного И для всех битов в выражение.Вычисления выполняются с 64-разрядной (BIGINT) точностью.
    Начиная с MySQL 4.0.17, эта функция возвращает 18446744073709551615, если нет подходящих строк. (Это беззнаковое значение BIGINT, в котором все биты установлены в 1). До версии 4.0.17 функция возвращала -1, если не было найдено подходящих строк.

  1. BIT_OR{выражение). Возвращает результат поразрядного ИЛИ для всех битов в выражение. Вычисления выполняются с 64-разрядной (BIGINT) точностью. Возвращает 0, если подходящие строки не найдены.
  2. BlTJiOR(выражение). Возвращает результат поразрядного исключающего ИЛИ для всех битов в выражение. Вычисления выполняются с 64-разрядной (BIGINT) точностью. Возвращает 0, если подходящие строки не найдены.

Функция доступна, начиная с MySQL 4.1.1.

  • COUNT {выражение). Возвращает количество значений, отличных от NULL, в строках, извлеченных оператором SELECT.
    mysql> SELECT student.student_name,COUNT(*) -> FROM student,course
    -> WHERE student.student_id=course.student_id -> GROUP BY student_name;
    COUNT(*) несколько отличается в том, что возвращает количество извлеченных строк, независимо от того, содержат они значения NULL или нет. Функция COUNT (*) оптимизирована для очень быстрого возврата, если SELECT об­ращается к одной таблице, и в нем нет конструкции where. Например: mysql> SELECT COUNT(*) FROM student;
    Эта оптимизация касается только таблиц MyISAM и ISAM, поскольку для этих типов таблиц явное количество строк сохраняется и может быть извлечено очень быст­ро. Для транзакционных механизмов хранения (innoDB, BDB) сохранение явного количества строк проблематично, поскольку одновременно может быть активно множество транзакций, каждая из которых изменяет количество строк.
  • COUNT (DISTINCT выражение [, выражение...]). Возвращает подсчитанное количество различных значений, отличных от NULL.
    В MySQL вы можете получить количество различных комбинаций выражений, которые не содержат NULL, передавая список этих выражений. В стандартном языке SQL потребуется выполнить конкатенацию всех выражений внутри COUNT (DISTINCT ...). COUNT (DISTINCT ...) появилась в MySQL 3.23.2.
  • GROUP_CONCAT (выражение). Эта функция возвращает результирующую строку с объединенными значениями из группы. Полный синтаксис выглядит так:
    GROUP_CONCAT([DISTINCT] выражение [,выражение ...]
    [ORDER BY {беззнаковое_целое \ имя_столбца \ выражение)
    [ASC | DESC] [,столбец ...]] [SEPARATOR строковое_значение])
    Пример:
    mysql> SELECT student__name,
    -> GROUP_CONCAT(test_score)
    -> FROM student
    -> GROUP BY studentjiame;
    или:
    mysql> SELECT student_name,
    -> GROUP__CONCAT(DISTINCT test_score

    -> FROM student
    -> GROUP BY student_name;
    В MySQL вы можете получить сцепленное значение комбинации выражений. Дублирующие значения можно исключить с помощью DISTINCT. Если вы желаете отсортировать значения в результате, то должны воспользоваться конструкцией ORDER BY. Чтобы отсортировать в обратном порядке, добавльте ключевое слово DESC к имени столбца, который сортируется конструкцией ORDER BY. По умолча­нию принимается порядок по возрастанию. Это можно специфицировать явно ключевым словом ASC. После SEPARATOR следует строковое значение, которое должно вставляться между значениями результата.
    По умолчанию применяется запятая. Вы можете вообще убрать разделитель, ука­зав SEPARATOR ''.
    Максимально возможную длину можно установить через системную переменную group_concatjnax_len. Синтаксис установки ее значения во время выполнения (здесь значение — беззнаковое целое) показан ниже: SET [SESSION | GLOBAL] group_concat_max len = значение; Если максимальная длина установлена, результат усекается до этой длины.
    На заметку!
    Все еще существует небольшое ограничение для GROUP_CONCAT (), когда она используется с DISTINCT вместе с ORDER BY и значениями типа BLOB.
    Функция GROUP_CONCAT () была добавлена в MySQL 4.1.

  • МIN [выражение)
    МАХ[выражение)
    Возвращает минимальное и максимальное значение выражение в группе. MIN () и МАХ () могут принимать строковый аргумент, в этих случаях возвращаются мини­мальное и максимальное строковые значения.
    mysql> SELECT student__name, MIN(testscore), MAX(test_scoxe) -> FROM student -> GROUP BY studentjiame;
    Для MIN (), MAX () и других агрегатных функций в настоящее время MySQL срав­нивает столбцы типа ENUM и SET по их строчным значениям вместо относительно­го положения строки в наборе. Это отличатся от того, как их сравнивает конст­рукция ORDER BY. Подобное положение будет исправлено.
  • STD[выражение)
    STDDEV[выражение)
Возвращает стандартное квадратичное отклонение выражение (корень квадратный из VARIANCE ()). Это расширение стандарта SQL. Форма STDDEVO этой функции введена для совместимости с Oracle.

  1. SUM [выражение). Возвращает сумму выражение. Отметьте, что если результирующий набор пуст, функция возвращает null!
  2. variance [выражение). Возвращает стандартное отклонение выражение (рассматривая строки как сплошную популяцию, которая имеет количество строк в качестве знаменателя). Это расширение стандарта SQL, доступное только в MySQL 4.1 и последующих версиях.