А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я
0-9 A B C D I F G H IJ K L M N O P Q R S TU V WX Y Z #


Чтение книги "MySQL 5.0. Библиотека программиста" (страница 16)

   Параметр GROUP BY

   В предыдущем подразделе мы рассматривали примеры запросов, в которых групповые функции вычисляют обобщающее значение для всех строк, удовлетворяющих условию отбора. Параметр GROUP BY позволяет объединять строки в группы, для каждой из которых групповая функция вычисляется отдельно. Для этого в параметре GROUP BY нужно указать столбец или несколько столбцов: в одну группу попадут строки с одинаковым набором значений в этих столбцах.
   Например, запрос

   SELECT customer_id, SUM(amount) FROM Orders
   GROUP BY customer_id;

   возвращает общую сумму заказов отдельно для каждого клиента (табл. 3.38). В этом запросе заказы сгруппированы по значению столбца customer_id (клиент), поэтому каждая группа состоит из заказов одного клиента, а функция SUM(amount) вычисляет сумму заказов в каждой из групп.
Таблица 3.38. Результат выполнения запроса
   Таким же образом можно подсчитать количество заказов каждого клиента, максимальную, минимальную и среднюю сумму заказа и др.
   Другой пример – запрос, возвращающий имена клиентов с одинаковым значением рейтинга:

   SELECT GROUP_CONCAT(name),rating FROM Customers
   GROUP BY rating;

   Этот запрос группирует клиентов по значению рейтинга и выводит имена клиентов в каждой группе (табл. 3.39).
Таблица 3.39. Результат выполнения запроса
   Если указано ключевое слово WITH ROLLUP, то обобщенные значения выводятся как для отдельных групп строк, так и для всех в совокупности строк.
   Например, запрос

   SELECT customer_id, SUM(amount) FROM Orders
   GROUP BY customer_id WITH ROLLUP;

   возвращает, помимо общей суммы заказов каждого клиента, сумму всех заказов (табл. 3.40).
Таблица 3.40. Результат выполнения запроса
   В этой таблице, по сравнению с табл. 3.38, появилась итоговая строка, содержащая общую сумму всех заказов.
   В запросе с параметром GROUP BY вы можете использовать условия как для отбора отдельных строк перед группировкой, так и для отбора групп строк. Если требуется выбрать из таблицы строки, удовлетворяющие какому-либо критерию, а затем объединить в группы только эти строки, то применяется параметр WHERE, который должен быть указан перед параметром GROUP BY.
   Например, запрос

   SELECT customer_id, COUNT(amount) FROM Orders
   WHERE amount>5000
   GROUP BY customer_id;

   позволяет подсчитать, сколько заказов на сумму более 5000 сделал каждый клиент (табл. 3.41). Сначала выбираются строки таблицы Orders (Заказы), для которых выполнено условие amount>5 0 0 0, далее эти строки группируются по значению столбца customer_id (клиент), и после этого вычисляется количество строк в каждой из групп.
Таблица 3.41. Результат выполнения запроса
   Для отбора групп строк служит параметр HAVING, о котором будет идти речь в следующем подразделе.

   Параметр HAVING

   Параметр HAVING позволяет задать условие отбора для групп строк. Он аналогичен параметру WHERE, но указывается после параметра GROUP BY и применяется к агрегированным строкам. В условии отбора параметра HAVING можно использовать значения столбцов, выводимых запросом, в том числе значения агрегатных функций.
   Например, если требуется вывести общую сумму заказов для каждого клиента, кроме тех клиентов, для кого эта сумма меньше 20 000, выполните запрос

   SELECT customer_id, SUM(amount) FROM Orders
   GROUP BY customer_id
   HAVING SUM(amount)> = 20000;

   Условие SUM(amount) > = 20 000 позволяет отобрать только те группы строк, в которых общая сумма заказа равна или превышает 20 000 (табл. 3.42).
Таблица 3.42. Результат выполнения запроса
   Итак, вы изучили запросы с групповыми функциями, позволяющими получать из таблиц обобщенные данные. Далее мы кратко рассмотрим некоторые полезные функции, оперирующие числовыми величинами.

   3.3. Числовые операторы и функции

   В данном разделе вы узнаете об основных операторах и функциях, используемых для арифметических, алгебраических и тригонометрических вычислений. Наиболее часто используемыми являются арифметические операторы.

   Арифметические операторы

   В выражениях вы можете использовать следующие арифметические операторы:
   • а + b.
   Оператор сложения. Возвращает сумму операндов a и b.
   • а – b.
   Оператор вычитания. Возвращает разность операндов a и b.
   При использовании с одним операндом меняет его знак, например – (3 + 2) = -5.
   • а * b.
   Оператор умножения. Возвращает произведение операндов a и b.
   • а / b.
   Оператор деления. Возвращает частное от деления a на b.
   • а DIV b.
   Оператор деления c остатком, или целочисленного деления. Возвращает целую часть частного от деления a на b. Например,:
   • 7 DIV 2 = 3,
   • (-7) DIV 2 = -3,
   • 7 DIV (-2) = -3,
   • (-7) DIV (-2) = 3.
   • a % b.
   Оператор вычисления остатка. Возвращает остаток от целочисленного деления a на b: величину a % b = a – b x (a DIV b). Например,:
   • 7 % 2 = 1,
   • (– 7) % 2 = -1,
   • 7 % (-2) = 1,
   • (-7) % (-2) = -1.
   В следующем подразделе мы рассмотрим алгебраические функции.

   Алгебраические функции

   В выражениях вы можете использовать следующие алгебраические функции:
   • ABS(x).
   Возвращает абсолютную величину (модуль) числа x. Например, ABS(10) = ABS(-10) = 10.
   • CEIL(x), CEILING(x).
   Функция округления в большую сторону. Возвращает наименьшее из целых чисел, которые больше или равны x. Например,:
   • CEIL(12345.6789) = 12346,
   • CEIL(-12345.6789) = -12345.
   • CRC32('Символьное значение').
   Функция вычисляет контрольную сумму для последовательности символов с помощью алгоритма CRC32. Подробнее об алгоритмах CRC вы можете прочитать здесь: http://ru.wikipedia.org/wiki/CRC32. Например, CRC32('Beк живи – век учись') = 4171076480.
   • EXP(x).
   Экспонента. Возвращает ex (экспоненту числа x).
   • FLOOR(x).
   Функция округления в меньшую сторону. Возвращает наибольшее из целых чисел, не превосходящих x. Например,:
   • FLOOR(12345.6789) = 12345,
   • FLOOR(-12345.6789) = -12346.
   • LN(x), LOG(x).
   Возвращает Inx (натуральный логарифм числа x). Таким образом, LN(EXP(y)) = y.
   • LOG10(x).
   Возвращает log10x (логарифм числа x по основанию 10). Например, LOG10(100) = 2.
   • LOG2(x).
   Возвращает log2x (логарифм числа x по основанию 2). Например, LOG2(16) = 4.
   • LOG(a,x).
   Возвращает logax (логарифм числа x по основанию a). Например, LOG(2,16) = LOG2(16) = 4.
   • MOD(a,b).
   Синоним выражения a % b, возвращает остаток от целочисленного деления a на b.
   • PI().
   Возвращает число π = 3,14159….
   • POW(x,y), POWER(x,y).
   Функция возведения в степень. Возвращает xy.
   Например, POW(2, 10) = 1024.
   • RAND().
   Возвращает случайное число в интервале от 0 до 1.
   • RAND(x).
   Возвращает псевдослучайное число в интервале от 0 до 1, при этом целое число x используется как начальное значение генератора псевдослучайных чисел. Возвращаемое значение при этом предопределено, например, RAND(2 0) всегда возвращает значение 0,1588826125104 7.
   • ROUND(x).
   Функция округления до целого. Возвращает целое число, ближайшее к x.
   • ROUND(x, n).
   Функция округления. Если n > 0, возвращает ближайшее к x число с n знаками после разделителя. Если n = 0, возвращает ближайшее к x целое число: ROUND(x,0) = ROUND(x). Если n < 0, возвращает ближайшее к x целое число, заканчивающееся на n нулей. Например,:
   ROUND(12345.6789,2) = 12345.68,
   ROUND(12345.6789,0) = 12346,
   ROUND(12345.6789,-2) = 12300,
   ROUND(-12345.6789,2) = -12345.68.
   • SIGN(x).
   Функция получения знака. Возвращает значение 1, если x > 0, значение 0, если х = 0, и значение – 1, если x < 0.
   • SQRT(x).
   Возвращает √x (квадратный корень из x).
   • TRUNCATE(x, n).
   Функция отбрасывания «лишних» цифр. Если n > 0, возвращается число, состоящее из целой части числа x и n его первых знаков после разделителя. Если n = 0, возвращается целая часть x. Если n < 0, возвращается число, в котором последние n цифр заменены нулями. Например,:
   TRUNCATE(12345.6789,2) = 12345.67,
   TRUNCATE(12345.6789,0) = 12345,
   TRUNCATE(12345.6789,-2) = 12300,
   TRUNCATE(-12345.6789,2) = -12345.67.
   В следующем подразделе мы рассмотрим алгебраические функции.

   Тригонометрические функции

   Рассмотрим тригонометрические функции, которые вы можете использовать в выражениях.
   • SIN(x).
   Возвращает синус угла величиной в x радиан.
   • COS(x).
   Возвращает косинус угла величиной в x радиан.
   • TAN(x).
   Возвращает тангенс угла величиной в x радиан.
   • COT(x).
   Возвращает котангенс угла величиной в x радиан.
   • ASIN(x).
   Возвращает арксинус числа x, то есть величину угла (в радианах, от – π / 2 до π / 2), синус которой равен x.
   • ACOS(x).
   Возвращает арккосинус числа x, то есть величину угла (в радианах, от 0 до π), косинус которой равен x.
   • ATAN(x).
   Возвращает арктангенс числа x, то есть величину угла (в радианах, от – π / 2 до π / 2), синус которой равен x.
   • ATAN2(x,y), ATAN(x,y).
   Возвращает величину угла (в радианах, от – π до π) между векторами с координатами (1,0) и (x,y), иными словами, величину угла между осью абсцисс и прямой, соединяющей точки (0,0) и (x,y) на координатной плоскости. Совпадает с ATAN(y/x), если x > 0.
   • DEGREES(x).
   Возвращает градусную меру угла, радианная мера которого равна x радиан. Например, DEGREES(PI()) = 180.
   • RADIANS(x).
   Возвращает радианную меру угла, градусная мера которого равна x градусов. Например, RADIANS(18 0) = 3,1415926535898.
   Итак, мы обсудили основные числовые функции. Далее мы кратко рассмотрим функции, оперирующие значениями даты и времени.

   3.4. Функции даты и времени

   В данном разделе мы рассмотрим некоторые полезные функции, выполняющие различные операции с датами: получение текущей даты и/или времени, получение отдельных компонентов даты и/или времени, арифметические операции с датами (сложение, вычитание) и преобразование форматов даты.
   В первую очередь познакомимся с функциями, которые возвращают текущую дату и/или время.

   Функции получения текущей даты и времени

   Для получения текущей даты и времени вы можете использовать следующие функции.
   • CURDATE(), CURRENT_DATE(), current_date.
   Возвращают текущую дату.
   • CURTIME(), CURRENT_TIME(), current_time.
   Возвращают текущее время.
   • NOW(), CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP, LOCALTIME(), LOCALTIME, LOCALTIMESTAMP(), LOCALTIMESTAMP.
   Возвращают текущую дату и время.
   • SYSDATE().
   Возвращает текущую дату и время Windows. В отличие от остальных функций, которые возвращают дату и/или время начала выполнения SQL-команды, функция SYSDATE() возвращает время своего вызова. Таким образом, если в одной SQL-команде функция SYSDATE() вызывается несколько раз, то возвращаемые ею значения могут быть различны.
   • UTC_DATE(), UTC_DATE.
   Возвращает текущую дату по UTC в формате «YYYY-MM-DD» (или, в зависимости от контекста, «YYYYMMDD»).
...
   Примечание
   UTC – универсальное скоординированное время, аналог гринвичского времени, основанный на атомном отсчете времени.
   • UTC_TIME(), UTC_TIME.
   Возвращает текущее время по UTC в формате «HH:MM:SS» (или, в зависимости от контекста, HHMMSS).
   • UTC_TIMESTAMP(), UTC_TIMESTAMP.
   Возвращает текущую дату и время по UTC в формате «YYYY-MM-DD HH:MM:SS» (или, в зависимости от контекста, «YYYYMMDDHHMMSS»).
   Далее рассмотрим функции, позволяющие выделять какую-либо часть даты.
Чтение онлайн



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Навигация по сайту


Читательские рекомендации

Информация