class DarkRaha extends com { // разработка приложений
            String a="Главная" b="Контакты" c="О сайте"
};

основы sql

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

Dynamic SQL

прочее

Справочник по SQL

Агрегатные функции, группировка данных

Для группировки данных в запросе select используется конструкция group by, в которой должны быть перечислены те же столбцы, что и после select. Ниже приведен пример вывода данных по группам для таблицы bills.


-- таблица счетов
create table bills(
id integer,
d date,  -- дата счета
summ double precision ,-- сумма счета
constraint pk_bills primary key (id)
);

-- вставка данных
insert into bills 
    values(1, date '2008-01-01', 5.5);
insert into bills 
    values(2, date '2008-02-01', 3.14);
insert into bills 
    values(3, date '2008-03-01', 10.14);
insert into bills 
    values(4, date '2008-01-01', 7.2);
insert into bills 
    values(5, date '2008-02-01', 6.4);
insert into bills 
    values(6, date '2008-03-01', 2.5);
commit;

-- вывод данных по группам
select t.d, t.summ from bills t
   group by t.d, t.summ

Сами по себе группы редко используются, и предыдущий пример выборки можно заменить сортировкой. Другое дело, если необходимо воспользоваться одной из групповых функций, называемых агрегатными:

Ключевое слово DISTINCT позволяет игнорировать повторные значения в столбце, ALL обрабатывает все значения в столбце (по умолчанию), * позволяет включить в обработку поля с null значением. В MySQL между именем функции и скобкой не должно быть пробелов. Ниже приведен пример использования агрегатных функций в качестве выбираемых данных. Если агрегатная функция используется в выборке без group by, то она применяется ко всем записям выборки, иначе для каждой группы в отдельности. И в любом случае в перечислении select нельзя смешивать групповые столбцы с не групповыми.


-- статистические данные по всем месяцам
select count(*) as "число записей",
       max(t.summ) as "макс. сумма",
       min(t.summ) as "мин. сумма",
       avg(t.summ) as "средняя сумма",
       sum(t.summ) as "общая сумма" 
from bills t; 

-- статистические данные по каждому месяцу
select t.d as "месяц", count(1) as "число записей",
       max(t.summ) as "макс. сумма",
       min(t.summ) as "мин. сумма",
       avg(t.summ) as "средняя сумма",
       sum(t.summ) as "общая сумма" 
from bills t 
group by t.d

Агрегатные функции можно использовать в выражениях условия в конструкции having для отбора группы.


-- отбираем группы у которых общая сумма больше 12
select t.d as "месяц", count(*) as "число записей",
       max(t.summ) as "макс. сумма",
       min(t.summ) as "мин. сумма",
       avg(t.summ) as "средняя сумма",
       sum(t.summ) as "общая сумма" 
from bills t 
group by t.d
having sum(t.summ)>12

Рейтинг@Mail.ru