| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Oracle > oracle ORA-00979: выражение не является выражением |
| Автор: 4epT 29.12.2011, 17:52 | ||||
Добрый вечер всем! Имееется вот такой запрос:
Данный запрос выберает все отправленные отчеты по отправителю ([email protected]), один отчет может уйти на нескольких адресатов, тем самым я пытаюсь сделать Group by по id отчета, что бы каждый отправленные отчет стал уникальным. При выполнении этого запроса вываливается такая ошибка:
Что я не так делаю ? |
| Автор: password 29.12.2011, 18:12 | ||||
| 1. что то непонятное накрутили после from 2. При группировке обязательно нужно указывать все поля 3.
ну и sql должен приобрести приблизительно такой вид:
|
| Автор: 4epT 29.12.2011, 18:21 | ||
| Дело в том что r.ROUTE это выбирает все отправленные ... [email protected] это тот кто отправил отчет. Если будет такая ситуация:
если тут группировать по ID, какой будет результат ? |
| Автор: password 29.12.2011, 18:31 | ||
только по одному полю ID группировать нельзя, если вы группируете, то группировку нужно проходит ПО ВСЕМ ВЫВОДИМЫМ полям, кроме расчетных (SUM,COUNT,MAX....) почитайте про "Аналитические функции "в ORACLE |
| Автор: 4epT 29.12.2011, 18:50 |
| Понятно, спасибо большое за объяснение ) я просто не правильно понимал как работает group by. А не подскажите, group by так работает во всех СУБД ? или только в Oracle ? |
| Автор: password 29.12.2011, 18:57 | ||
Исключения я встречал только MySQL и в DBASE при работе через FOXPRO - там можно группировать по нескольким полям. |
| Автор: Zloxa 30.12.2011, 02:04 | ||||
Здесь тоже можно группировать по нескольким полям. Наверное ты не правильно выразился. На счет FoxPro не знаю, но MySQL действительно допускает использовать в списке выводимых полей (select-list) не перечисленные в выражении group by поля без использования аггрегатов. Что, с моей точки зрения, слишком часто сбивает с толку новичков, мешает им понять суть происходящего и провоцирует их допускать ошибки.
Для того, чтобы правильно реализовать это условие, надо определиться по какому принципу дожны формироватся дополнительные аттрибуты выборки. Например в вашем случае:
какой дескрипшн из двух указанных, должен оказаться результирующей выборке, если значение ID станет там уникальным? На этом примере прекрасно видно благо, которое несет наличие ограничения, наложенного ораклом. Начинающий MySQLщик не стал бы париться этим вопросом и получил бы недетерменированный результат, который сегодня, на тестовой среде, казалось бы, стабильно возвращает descr1, а завтра, при переносе окружение заказчика, необъяснимо, станет возвращать descr2. |