UPDATE Customers SET rating = IF(rating>1000,rating*2,rating);
• IFNULL(a,b). Данная функция возвращает значение a, если это значение отлично от NULL, и значение b, если a равно NULL. Например, если требуется всем клиентам, чей рейтинг не указан (равен NULL), присвоить рейтинг 500, это можно сделать с помощью команды
UPDATE Customers SET rating = IFNULL(rating,500);
• NULLIF(a,b). Данная функция возвращает значение NULL, если a = b, и значение a в противном случае. Например, если требуется выполнить операцию, обратную операции из предыдущего пункта, то есть всем клиентам с рейтингом 500 присвоить неопределенный рейтинг, это можно сделать с помощью команды
UPDATE Customers SET rating = NULLIF(rating,500);
• CASE x WHEN a1 THEN b1.
[WHEN a2 THEN b2]
…
[WHEN an THEN bn]
[ELSE b0]
END или
CASE WHEN x1 THEN b1
[WHEN x2 THEN b2]
…
[WHEN xn THEN bn]
[ELSE b0]
END Оператор CASE обеспечивает последовательную проверку списка условий и возвращает значение в зависимости от того, какое из условий выполнено. В первом варианте значение выражения х сравнивается со значениями a1, a2,…, an :
• если х = ai , то оператор возвращает значение bi;
• если значение выражения х не совпало ни с одним из a, то оператор возвращает значение b0 , заданное с помощью параметра ELSE;
• если значение выражения х не совпало ни с одним из ai , а параметр ELSE не задан, то оператор возвращает значение NULL.
Во втором варианте последовательно проверяется истинность логических выражений хi:
• если хi истинно, то оператор возвращает значение bi;
• если ни одно из выражений хi не является истинным, то оператор возвращает значение b0 , заданное с помощью параметра ELSE;
• если ни одно из выражений хi не является истинным, а параметр ELSE не задан, то оператор возвращает значение NULL.
Например, запрос
SELECT date,customer_id,amount,
CASE WHEN amount< = 5000 THEN \'Малый\'
WHEN amount BETWEEN 5000 AND 15000 THEN \'Средний\'
WHEN amount>15000 THEN \'Крупный\'
END
FROM Orders
ORDER BY customer_id,amount DESC; выводит классификацию заказов в зависимости от их стоимости (табл. 3.22). Таблица 3.22. Результат выполнения запроса
Итак, мы рассмотрели операторы и функции, с помощью которых вы можете сравнивать между собой различные величины, в том числе сравнивать значение с результатом подзапроса, а также проверять выполнение различных условий. Следующий важный и часто используемый класс функций – групповые функции.
3.2. Групповые функции
Групповые, или агрегатные, функции используются для получения итоговой, сводной информации на основе значений, хранящихся в столбце таблицы. В этом разделе вы узнаете об этих функциях, а также об особенностях синтаксиса запросов, использующих эти функции.
Перечень групповых функций
Для вычисления обобщающего значения столбца таблицы предназначены следующие функции.
SUM()
Данная функция возвращает сумму значений в столбце. Неопределенные значения при этом не учитываются. Если запросом не найдено ни одной строки или все значения в столбце равны NULL, то функция возвращает значение NULL.
Например, запрос
SELECT SUM(rating) FROM Customers;
возвращает сумму рейтингов клиентов – величину, полученную при сложении значений 1000 + 1500 + 1000 (табл. 3.23). Таблица 3.23. Результат выполнения запроса
Исключить повторяющиеся значения при подсчете суммы можно с помощью параметра DISTINCT. Если указан этот параметр, то каждое значение столбца будет учтено в сумме только один раз, даже если в столбце оно встречается несколько раз.
Например, запрос
SELECT SUM(DISTINCT rating) FROM Customers;