Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Отличия ORDER от GROUP
 
 автор: rprint-max   (06.10.2006 в 12:27)   письмо автору
 
 

Подскажите, вкратце, чем отличаются эти операторы?

   
 
 автор: Ученик   (06.10.2006 в 13:05)   письмо автору
 
   для: rprint-max   (06.10.2006 в 12:27)
 

ORDER сортирует полученные результаты по выбранному полю, сортировать можно по-возрастанию и убыванию значений.


SELECT * FROM table ORDER BY name

Отсортирует вывод по именам

Андрей | 23
Артем |22
Дмитрий | 33
Сергей | 23
Ян | 22

GROUP группирует вывод результатов по какому либо полю.

SELECT * FROM table GROUP BY age

Сгруппирует результаты по возрасту.

Андрей | 23
Артем |22
Дмитрий | 33

Часто используют для подсчета числа записей в группе.

SELECT COUNT(*) FROM table GROUP BY age


2
2
1

   
 
 автор: tuder   (06.10.2006 в 13:06)   письмо автору
 
   для: rprint-max   (06.10.2006 в 12:27)
 

order - это по какому полю/ключу и в каком порядке(прямом/обратном) упорядочить выбранные записи.

group - это сгруппировать записи по какому-то полю/ключу, оставив только одну запись с каждым значением.

Скажем
id
3
1
2
2
3

группируем по id подсчитывая их количество

SELECT ip, count(ip) FROM `table` group by ip

имеем

3 2
1 1
2 2

Упорядочиваем
SELECT ip, count(ip) FROM `table` group by ip order by ip

1 1
2 2
3 2

   
 
 автор: Trianon   (06.10.2006 в 13:53)   письмо автору
 
   для: rprint-max   (06.10.2006 в 12:27)
 

Эти инструкции не имеют ничего общего.
То есть вообще ничего.
Инструкция GROUP BY разбивает строки табличной выборки на группы, которые потом обрабатываются агрегатными функциями SUM, AVG, MAX и т.п. независимо в каждой группе.
При этом в результате оказываются строки по числу групп, а не по числу строк в табличной выборке. Можно включать в резуьтат строки не со всех групп, а с некоторых. Для этого применяется инструкция HAVING (формат аналогичен WHERE)

Инструкция ORDER BY работает со строками результата.
Она ничего не группирует, она всего лишь задает порядок вывода строк.

Общий порядок исполнения запроса такой:
из таблиц, указанных в разделе FROM c учетом оперяций "эапятая" и разных JOIN строится табличная выборка.
Строки из нее пропускаются через условия WHERE. Неподошедшие исключаются.
Если присутствует GROUP BY или агрегатные функции в запросе, полученные строки разбиваются на группы (при отсутствии GROUP BY формируется одна общая группа)
к которым применяются агрегатные функции, формирующие по одной строке на каждую группу.Если указано HAVING, строки, не попадающие под условие, удаляются.
Далее исполняется инструкция ORDER BY, которая расставляет строки в заказанном порядке.

В общем случае в SQL нельзя применять GROUP BY так, чтоб у SELECT оставались повисшими какие-то поля, т.е. каждое выбираемое поле должно быть либо перечислено в GROUP BY либо быть параметром агрегатной функции, иначе возникает неоднозначность.

В MySQL висячие поля допускаются, сервер при этом формирует DISTINCT-выборку, выкидывая из табличной выборки все строки кроме одной.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования