Вызов групповых функций для
SQL-команд, не содержащих GROUP
BY, эквивалентен выполнению
этих функций над всем набором
возвращаемых данных.
COUNT(expr)
Возвращает количество величин
со значением, не равным
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;
COUNT(DISTINCT expr,[expr...])
Возвращает количество
различающихся величин со
значением, не равным
NULL:
mysql> SELECT COUNT(DISTINCT results) FROM student;
В MySQL для того, чтобы получить
количество различающихся
комбинаций выражений, не
содержащих NULL, нужно
просто задать список этих
выражений. В ANSI SQL необходимо
провести конкатенацию всех
выражений внутри COUNT(DISTINCT
...).
AVG(expr)
Возвращает среднее значение аргумента expr:
mysql> SELECT student_name, AVG(test_score)
FROM student
GROUP BY student_name;
MIN(expr), MAX(expr)
Возвращает минимальную или
максимальную величину аргумента
expr. Функции
MIN() и MAX()
могут принимать строковый
аргумент; в таких случаях они
возвращают минимальную или
максимальную строковую
величину. See Раздел 5.4.3, «Использование индексов в MySQL».
mysql> SELECT student_name, MIN(test_score), MAX(test_score)
FROM student
GROUP BY student_name;
В MIN(), MAX() и
других групповых фунциях MySQL
сейчас сравнивает ENUM и
SET-столбцы по ихнему
строковому представлению а не по
относительной позиции строки в
множестве. Это будет исправлено.
SUM(expr)
Возвращает сумму величин в
аргументе expr. Обратите
внимание: если возвращаемый
набор данных не содержит ни
одной строки, то функция
возвращает NULL!
VARIANCE(expr)
Возвращает вариант стандарта,
которому соответствует
expr. Это - расширение по
сравнению с ANSI SQL, доступное
только в 4.1 или более поздних
версиях.
STD(expr),
STDDEV(expr)
Возвращает среднеквадратичное
отклонение значения в аргументе
expr. Эта функция
является расширением ANSI SQL. Форма
STDDEV() обеспечивает
совместимость с Oracle.
BIT_OR(expr)
Возвращает побитовое ИЛИ для
всех битов в expr.
Вычисление производится с
64-битовой (BIGINT)
точностью.
BIT_AND(expr)
Возвращает побитовое И для всех
битов в expr. Вычисление
производится с 64-битовой
(BIGINT) точностью.
В MySQL расширены возможности
использования оператора GROUP
BY. Теперь в выражениях
SELECT можно использовать
столбцы или вычисления, которые не
присутствуют в части GROUP
BY. Это справедливо для любой
возможной величины для этой
группы. Данная возможность
позволяет повысить
производительность за счет
исключения сортировки и
группирования ненужных величин.
Например, в следующем запросе нет
необходимости в группировке
customer.name:
mysql> SELECT order.custid,customer.name,MAX(payments)
FROM order,customer
WHERE order.custid = customer.custid
GROUP BY order.custid;
В ANSI SQL к предложению GROUP
BY необходимо добавлять
customer.name. В MySQL, если
работа происходит не в режиме ANSI,
это имя избыточно.
Не используйте данное свойство,
если столбцы, пропущенные в части
GROUP BY, не являются
уникальными в данной группе!
Возможны непредсказуемые
результаты.
В некоторых случаях можно
применять функции MIN() и
MAX() для получения
указанной величины столбца, даже
если он не является уникальным. В
следующем примере выдается
значение столбца column из
строки, содержащей наименьшую
величину в столбце sort:
SUBSTR(MIN(CONCAT(RPAD(sort,6,' '),column)),7)
See Раздел 3.5.4, «Строка, содержащая максимальное значение некоторого столбца».
Следует отметить, что в версии MySQL
3.22 (или более ранней) либо при
попытке работы в рамках ANSI SQL
применение выражений в
предложениях GROUP BY или
ORDER BY невозможно. Это
ограничение можно обойти,
используя для выражения псевдоним:
mysql> SELECT id,FLOOR(value/100) AS val FROM tbl_name
GROUP BY id,val ORDER BY val;
В версии MySQL 3.23 можно также выполнить следующее:
mysql> SELECT id,FLOOR(value/100) FROM tbl_name ORDER BY RAND();
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
