2013-03-20 1 views
2
SELECT ssn, fname, minit, lname, AVG(hours) 
FROM EMPLOYEE, WORKS_ON 
WHERE EMPLOYEE.ssn = WORKS_ON.essn 
GROUP BY hours 
ORDER BY AVG(hours) DESC 

Это показывает ошибку ORA-00979: Не GROUP BY выражениеORA-00979: не выражение GROUP BY Ошибка, как ее решить?

Интересно, почему он не работает? Btw, вся таблица существует и без каких-либо ошибок. Его в Oracle AE 11g =========== ОБНОВЛЕНИЕ ========================== Таблица в соответствии с запросом

SSN FNAME MINIT LNAME AVG(HOURS) 
888665555 James E Borg - 
666884444 Ramesh K Narayan 40 
999887777 Alicia J Zelaya 20 
987987987 Ahmad V Jabbar 20 
453453453 Joyce A English 20 
123456789 John B Smith 20 
987654321 Jennifer S Wallace 17.5 
333445555 Franklin T Wong 7.33333333333333333333333333333333333333 
+0

Вы, кажется, вставили неправильные вещи в ваш вопрос: вы имели в виду, чтобы опубликовать подробную информацию о ваших таблицах (включая 'salary'), но вместо того, чтобы вы разместили на результат, полученный набор исправленным запросом (который не включает «зарплату»). – ruakh

+0

игнорировать мой предыдущий запрос :) спасибо! –

+0

Добро пожаловать! – ruakh

ответ

3

Я думаю, что вы группируетесь по полной противоположности тому, что вам нужно. Вы хотите:

SELECT ssn, fname, minit, lname, AVG(hours) 
FROM EMPLOYEE, WORKS_ON 
WHERE EMPLOYEE.ssn = WORKS_ON.essn 
GROUP BY ssn, fname, minit, lname 
ORDER BY AVG(hours) DESC 
+0

Кстати, что, если я хочу показать зарплату в течение нескольких лет (более одного раза в БД), этот результат запроса будет выдающимся .... Как я могу это сделать? Благодаря! –

2

Поскольку вы используете функцию агрегации AVG(hours), вам нужно сгруппировать остальные результаты:

SELECT ssn, fname, minit, lname, AVG(hours) 
FROM EMPLOYEE, WORKS_ON 
WHERE EMPLOYEE.ssn = WORKS_ON.essn 
GROUP BY ssn, fname, minit, lname 
ORDER BY AVG(hours) DESC 
+0

Как выглядит таблица с зарплатой ? – clav

+0

updated, check plz –

3

Я думаю, что вы имели в виду, чтобы GROUP BY агрегированные столбцы:

SELECT ssn, fname, minit, lname, AVG(hours) 
FROM EMPLOYEE, WORKS_ON 
WHERE EMPLOYEE.ssn = WORKS_ON.essn 
GROUP BY ssn, fname, minit, lname 
ORDER BY AVG(hours) DESC 
+0

Независимо от вашего столбца даты, вы должны добавить 'TO_CHAR (dateColumn, 'YYYY)' как в свой список столбцов, так и в свой список GROUP BY. – Kermit

 Смежные вопросы

  • Нет связанных вопросов^_^