Главная SQL Group By
E-mail Печать PDF

GROUP BY - данный запрос используется для группирования результата одного или нескольких столбцов.

Синтаксис SQL GROUP BY

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

Пример SQL GROUP BY

Есть следующая таблица "Orders":

O_IdOrderDateOrderPriceCustomer
1 2008/11/12 1000 Hansen
2 2008/10/23 1600 Nilsen
3 2008/09/02 700 Hansen
4 2008/09/03 300 Hansen
5 2008/08/30 2000 Jensen
6 2008/10/04 100 Nilsen

Теперь мы хотим найти общую сумму заказа для каждого клиента.

Выполним запрос:

1
2
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

Результат запроса:

CustomerSUM(OrderPrice)
Hansen 2000
Nilsen 1700
Jensen 2000

Теперь давайте посмотрим, что произойдет, если мы не используем запрос GROUP BY:

1
SELECT Customer,SUM(OrderPrice) FROM Orders

Результат запроса:

CustomerSUM(OrderPrice)
Hansen 5700
Nilsen 5700
Hansen 5700
Hansen 5700
Jensen 5700
Nilsen 5700

Использование GROUP BY для нескольких колонок

1
2
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate

Комментарии

 
+8 #1 seitbekir 2009-11-20 17:32 спасибо! вот только как в цикле выводить, также как и обычно? Цитировать
 
 
+19 #2 Lightxlampa 2010-03-14 13:42 Спасибо, отличный пример! Наконец-то этот запрос понял. Цитировать
 
 
-7 #3 Анна 2010-08-03 12:17 а как вывести для каждого клиента дату последнего заказа с указанием стоимость этого заказа? Цитировать
 
 
-4 #4 ageent 2010-08-03 18:50 примерно так SELECT Customer, OrderDate, OrderPrice FROM Orders GROUP BY Customer ORDER BY OrderDate DESC Цитировать
 
 
-8 #5 STEREOLOVER.CS 2010-08-10 09:57 Народ бьюсь уже кучу времени. Есть запрос, объединяющий три таблицы. Пусть они будут называться car, box и load. Объёдинены они с использованием left join
см см см м3
car.name box.name box.height box.width box.depth load.name load.volume
жигули ящик 1 20 30 50 корова 0,5
жигули ящик 2 10 50 10 свинья 0,2
ламборгини ящик 3 15 15 20 картошка 0,1
ламборгини ящик 3 15 15 20 марковка 0,15
ламборгини ящик 4 10 10 10 null null
Там где нул как вы догадываетесь ящик без груза. Задача следующая. Нужно вычислить объём всех ящиков и объём всех грузов и группировать это всё по имени машины.

car.name box_volume load_volume
жигули 1,1 0,7
ламборгини 0,7 0,25
P.S. в box_volume не рассчитывал точно, а поставил цифры от балды. Дынные выше только для примера как должно выглядеть в итоге.

Сам запрос выглдядит примерно так:
select car.name

from car, box left join load on box.id=load.box_id
where…
group by car.name

Стал на, том что не могу посчитать объём всех ящиков, т.к. если просто указать SUM(box.height*box.width*box.depth)/1000000 у меня объём ящика 3 посчитается 2 раза, а если использовать вложенный запрос для выбора только подходящих строк из box между select и where, то GROUP BY car.name не группирует данные из подзапроса :( Подскажите как можно решить данную задачу?
Цитировать
 
 
+6 #6 Шелест Константин 2010-10-29 00:50 спс!!! доступно объясняете ))) Цитировать
 
 
-5 #7 Артур Пирожков 2011-04-19 13:53 К примеру, одна фирма зарегистрирован а в 3-х категориях каталога. В таблице это выглядит так:

category firm
———————————————————
Реклама Медиагруп
Создание сайтов Медиагруп
Раскрутка сайтов Медиагруп

На выходе должно выглядеть так:

Название фирмы Категория
———————————————————-
Медиагруп Реклама
Создание сайтов
Раскрутка сайтов
———————————————————-

Можно ли это реализовать при помощи group? Или какой запрос здесь нужно использовать и как его правильно обработать средствами php ?
Цитировать
 
 
0 #8 Рамиль 2011-04-27 12:01 Чего-то я не пойму. Суммирую два столбца 20+5 у меня выходит 20 и 5 а не 25. Подскажите кто нибудь..как эту бяку просуммировать. Цитировать
 
 
+5 #9 Lirriella 2011-06-22 14:40 Спасибо большое, наконец, поняла, что делает group by! Цитировать
 
 
0 #10 Максим 2011-11-23 14:28 Цитирую ageent:
примерно так SELECT Customer, OrderDate, OrderPrice FROM Orders GROUP BY Customer ORDER BY OrderDate DESC

Тоже ищу как вывести для каждого клиента дату последнего заказа с указанием стоимость этого заказа.. но этот sql запрос не подходит, т.к. выполняется сначала GROUP BY, а потом ORDER BY. Будет признателен, если кто-нибудь поможет с этим запросом…
Цитировать
 

Авторизация

Nice Ajax Poll

Какое из моих расширений самое лучшее?

Статистика



Реклама