Главная » Программирование » Основы SQL. Оператор SELECT конструкция GROUP BY
Русфонд

Основы SQL. Оператор SELECT конструкция GROUP BY

22 июня 2012 - Рубрики Программирование

4694 просмотров

В сайдбар справа добавлена кнопка Google+. Если вам поможет данный материал, прошу вас нажмите на кнопку - порекомендуйте сайт в Google.

Добрый день!

Продолжаем изучение языка SQL и оператора SELECT в частности. Сегодня рассмотим конструкцию GROUP BY.
Конструкция GROUP BY позволяет сгруппировать данные по определенным полям в результате запроса.
Синтаксис оператора имеет следующий вид

SELECT <СПИСОК ПОЛЕЙ>
FROM <ИМЯ ТАБЛИЦЫ>
WHERE <УСЛОВИЕ>
GROUP BY <СПИСОК ПОЛЕЙ ГРУППИРОВКИ>
HAVING <УСЛОВИЕ>

В списке полей после SELECT могут быть указаны либо поля, которые также указаны в GROUP BY, либо агрегатная функция, либо подзапрос (не всегда).  Обращаю внимание на различие в имени поля в агрегатных функциях. Например, если используется Count(*), то результат будет один, если написано Count(name), то результат может быть другим — будьте бдительны (пример см. ниже).

Вместо Имя таблицы в FROM могут быть несколько таблиц, связанных JOIN-ами. В GROUP BY указываем список полей, по которым необходимо произвести группировку. Группировку можно понимать как схлопывание результата запроса без GROUP BY и образование новой таблицы, в которой есть только те поля, которые указанны в SELECT. HAVING используется для отсеивания данных уже после процесса группировки.

Рассмотрим примеры:

Посчитать сколько человек работает в каждом отделе.

select count(*),
dept_id as [Номер департамента]
from employees
group by dept_id

Можно также указать вместо номера департамента его название, так ведь удобнее :)

select count(name), 
(select dept_name from departments where id=dept_id)
from employees
group by dept_id

Теперь иллюстрация на тему count(*) и count(name). В самой таблице для одного из сотрудников поле name не заполнено (равно null). Сравните результаты

Также обратите внимание, что в данных примерах группировка уже идет по 2 полям: номер отдела (dept_id) и возраст сотрудника (age).

Теперь рассмотрим условие HAVING  - как я уже писал раньше, данная конструкция позволяет отфильтровать результаты сгруппированных данных.

Например, необходимо найти отделы, в которых работает больше 2 сотрудников

select count(*), 
(select dept_name from departments where id=dept_id)
from employees
group by dept_id
having count(*)>2

Обязательно оставляйте комментарии к данной теме, если у вас возникли какие-либо вопросы с пониманием данного материала. Мне не раз приходилось сталкиваться с тем, что из-за непонимания принципа работы GROUP BY  пользователи лепили его непонятно зачем и в итоге из запроса получалась какая-то ерунда :-o

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

Если этот материал оказался вам полезен, порекомендуйте его в в Google, нажав кнопку Google+ справа в сайдбаре или через кнопки социальных сервисов ниже.

П.С. не забудьте оставить комментарий к статье, а также поделиться ссылкой с друзьями и коллегами через социальные сервисы или скопировав ссылку на статью ниже. Кроме того, вы можете предложить тему статьи через кнопку слева "Предложить тему статьи". Там же можно оставить пожелания, идеи по развитию сайта, а также благодарности (ну а вдруг)
П.П.С. предлагаю вам также вступить в Группа Вконтакте!группу Вконтакте, где вы сможете пообщаться с участниками на интересующие вас темы. Смелее!!!
Если вы больше времени проводите в Twitter, то за обновлениями на сайте можно следить, подписавшись на мою лентуTwitter: follow me!

Возможно вам также будут интересны статьи :

 

Предыдущие материалы из данной категории:

Комментариев: 2 , , ,

Понравилась статья? Поделитесь ссылкой




Комментарии к «Основы SQL. Оператор SELECT конструкция GROUP BY»:

  1.  Светлана 14 декабря 2012 20:17:44

    В последнем примере, где необходимо найти отделы, в которых работает больше 2 сотрудников, как найти отделы с максимальным количеством сотрудников?

    •  Руслан 14 декабря 2012 21:33:03

      если рассматривать именно этот пример то можно просто отсортировать по количеству по убыванию
      второй вариант рассматривать результат этого запроса как таблицу
      http://www.itrecords.ru/osnovy-sql-vyborka-iz-rezultatov-zaprosa-select/
      и просто сделать из нее выборку максимального значения

Оставьте комментарий:




:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

Я человек, а не бот.