Всем привет в данной статье мы с вами рассмотрим предложение GROUP BY для чего оно служит и как им пользоваться.
Таблица которую мы будем использовать
id tovar summa
========================================================
1 tovar1 1000
2 tovar2 10000
3 tovar3 3000
4 tovar4 1000
5 tovar5 3000
6 tovar6 3500
=========================================================
И давайте сразу рассмотрим запрос с использованием GROUP BY, допустим мы хотим посчитать количество товаров на каждую из ценовых категорий:
SELECT `summa`, COUNT(`summa`) AS count FROM `tovar` GROUP BY `summa`
Результатом нам вернулось
summa count
1000 2
3000 2
3500 1
10000 1
мы получили, то что хотели! Давайте подробнее разберем наш запрос.
В первой части запроса мы указали что нам нужно поле summa и количество строк которому мы присвоили псевдоним count, то есть количество строк у нас будет доставаться через поле count. Во второй части запроса мы указали GROUP BY (группировать строки) , и указали поле summa.
Что тут следует учитывать!
SELECT `summa`,`tovar`, COUNT(`summa`) AS count FROM `tovar` GROUP BY `summa`
результат:
summa tovar count
1000 tovar1 2
3000 tovar3 2
3500 tovar6 1
10000 tovar2 1
этот запрос хоть и вернет нам значение, но он будет не коректен, так как поле tovar не указано в нашей группировке полей GROUP BY и следовательно на каждую группу суммы у нас вернется, только одно значение поля tovar учитываю, то что значения поля tovar в нашей таблице не повторяются. Но мы можем записать наш запрос так:
SELECT `summa`,`tovar`, COUNT(`summa`) AS count FROM `tovar` GROUP BY `summa`,`tovar`
Результат:
summa tovar count
1000 tovar1 1
1000 tovar4 1
3000 tovar3 1
3000 tovar5 1
3500 tovar6 1
10000 tovar2 1
Как видите теперь группировка полей произошла у нас по полю `tovar`, потому что оно указанно последним аргументом предложения GROUP BY. Отсюда можно сделать простой вывод ,в качестве аргумента группировки строк нужно указывать одно поле.
К примеру на ничто не мешает посчитать общую сумму, количество, среднее значение и т.п .
Рассмотрим следующий запрос:
SELECT `summa`, COUNT(`summa`) AS count,SUM(`summa`) AS sum,AVG(`summa`) AS avg FROM `tovar` GROUP BY `summa`
В результате мы получили количество, общую сумму и среднее значение у каждой ценовой категории.
Вот и все дорогие друзья что я вам хотел рассказать о группировке строк в SQL.
Надеюсь вам было интересно и вы смогли узнать что то новое.
Удачи!