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 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