Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #75, МАРТ 2005 г.

Качай мускулы

Степан Ильин aka Step

Хакер, номер #075, стр. 075-028-5


SELECT FirstName,LastName FROM customers ORDER BY LastName

Расширь и углуби!

С уверенностью можно сказать, что любой компьютерный язык, в том числе и SQL, имеет не только определенный набор команд, но еще и некоторый арсенал функций. В SQL’е условно выделяют два вида функций: агрегатные (работают с наборами данных, но возвращают единственное значение) и скалярные (оперируют с единственным аргументом и возвращают результат его обработки). Вторая категория очень сильно зависит от конкретной БД-платформы, поэтому скалярные функции мы рассматривать не будем. Что же касается агрегатных функций, то я просто не могу о них не упомянуть. Познакомлю тебя с одной из них – функцией SUM.

Суть ее работы несложно понять из названия. Функция суммирует выбранные значения числового поля, указанного ей в качестве аргумента.

SELECT SUM(Sum) FROM orders

// Суммируются все значения столбца Sum, а получившееся число возвращается в виде результата запроса.

SELECT SUM(Sum) FROM orders where Payment=’Check’

// В ответ на этот запрос возвращается общая стоимость заказов, оплаченных чеком.

Если нужно просуммировать исключительно неповторяющиеся значения поля, то к вызову функции SUM необходимо добавить уже знакомую тебе команду DISTINCT. Запрос в таком случае приобретает следующий вид: SELECT SUM(DISTINCT Sum) FROM orders. Все остальные агрегатные функции работают по тому же самому принципу. Их название и выполняемое ими действие ты сможешь найти в соответствующей врезке. Однако нужно разобраться еще с одной тонкостью их использования. Посмотри на таблицу заказов и подумай, как можно составить запрос, который бы вывел финансовую статистику по различным методам оплаты. Сгоряча можно записать так: SELECT Payment,SUM(Sum) FROM orders. Загвоздка заключается в том, что при таком раскладе второй столбец таблицы будет полностью заполнен одним и тем же значением – суммой по всему полю Sum.

Чтобы устранить подобные ограничения, разработчики SQL ввели специальную инструкцию GROUP BY. Ее общий синтаксис имеет довольно громоздкий вид:

SELECT <имя поле>, SUM(<поле суммирования>) FROM <имя таблицы> GROUP BY <имя поля>

Однако конкретный пример и результат запроса на скриншоте должны все расставить по местам:

SELECT Payment,SUM(Sum) FROM orders GROUP BY Payment

Братство таблиц

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

Первое, что нужно запомнить, — во время работы с несколькими таблицами обращение к определенному полю осуществляется следующим образом: <имя таблицы>.<имя поля>. Например с помощью customers.FirstName ты обратишься к полю FirstName таблицы customers.

Назад на стр. 075-028-4  Содержание  Вперед на стр. 075-028-6