group by 11g

995533
Дата: 19.03.2011 15:17:22
Простой запрос

SELECT a, b, c, d FROM TABLE ORDER BY b;

В итоге ошибка: ORA-00979: not a GROUP BY expression.

Если сделать:
SELECT a, b, c, d FROM TABLE ORDER BY a, b, c, d;

то все нормально НО мне надо сгруппировать то по одному полю, но вернуть все поля.
Как быть.
WWWeb
Дата: 19.03.2011 15:22:36
order by 2
Военком
Дата: 19.03.2011 15:27:46
Вам бы ребята в армии послужить
AmKad
Дата: 19.03.2011 15:37:15
995533, WWWeb

www.firststeps.ru
WWWeb
Дата: 19.03.2011 15:43:14
AmKad,

ты вопрос понял? сгруппировать или сортировать?
AmKad
Дата: 19.03.2011 15:56:27
WWWeb
AmKad,

ты вопрос понял? сгруппировать или сортировать?

Очевидно, что глубокоуважаемый цифирь (скорее всего до конца не осознавая разницу между order by и group by) не стал задумываться о том, что же именно он включил в теги src. А ты, видимо не осознаешь, в каких случаях возникает ошибка ORA-00979 и что твоим order by 2 она не лечится.
995533
Дата: 19.03.2011 18:51:17
Все правильно я не о том думал когда писал сообщение. вопрос идет именно о GROUP BY!
WWWeb
Дата: 19.03.2011 19:59:17
995533,
Ну тогда используй агрегатные функции. Все зависит что тебе нужно сгруппировать. К примеру, если хочешь получить максимальные значение в группе то запрос будет выглядеть так
SELECT  b,  max(a), max(c), max(d) FROM TABLE GROUP  BY b;
sergey.semka
Дата: 21.03.2011 13:48:41
GROUP BY - из названия понятно, что это "групповая" функция... и результаты, следовательно групповые тоже должны быть (агрегатные)...
Зависит от того, что тебе хочется вернуть?

Order by - это сортировка. При этом можно сортировать даже по псевдо-столбцам, результатам работы функций над полями и т.д.
То есть зависимости между выводимым результатом (полями выборки) и полями, участвующими в сортировке (Order by) не принципиальны.

Если надо вытянуть выборку по сгруппированным значениям, используют:
SELECT a,b,c,d
FROM table_name
GROUP BY a,b,c,d;

можно так же:
--С ВЫВОДОМ КОЛИЧЕСТВО КАЖДЫХ АГРЕГАТОВ...
SELECT a,b,c,d, count(*) as COUNTER
FROM table_name
GROUP BY a,b,c,d;

--Иногда используют Group by чтобы вывести только строки, которых, например больше 1 или там 10 штук ровно...
тогда можно использовать Group by.... having count(*)>1

а если вывести все такие - подзапрос тебя спасет...

select * from ...
where KEY in
(.select KEY group by KEY HAVING COUNT(*)=10...........)

УТОЧНЯЙ ВОПРОС.
kastolom
Дата: 21.03.2011 15:17:28
можешь заюзать unique или distinct, там дубликаты тоже исчезнут
select unique a, b, c, d from table
select distinct a, b, c, d from table