Я должен создать запрос, который отображает job_id, no job_id, sum (зарплата) и аве (зарплата)
Возможный исход:
JOB_ID NO. OF JOB_ID SUM(SALARY) AVE(SALARY)
-------------------------------------------------------
IT_PROG 3 10200 5100
AC_MGR 1 12000 12000
.
.
.
12 rows selected.
МОЙ ВВОД НИЖЕ, но я не могу получить результат, о котором говорилось выше. Мне нужно сгруппировать их зарплаты в соответствии с их идентификатором работы, но я не могу ввести job_id, так как это не группа по функциям
SQL > SELECT JOB_ID, COUNT(MAX(JOB_ID)) AS "NO. OF JOB_ID", SUM(SALARY), AVG(SALARY)
2 FROM EMPLOYEES
3 GROUP BY JOB_ID, SALARY;
Что я делаю неправильно? Спасибо


Я считаю, что это код, который вам нужен для вывода:
SELECT job_id, COUNT(job_id) AS "NO. OF JOB_ID", SUM(salary), AVG(salary)
FROM employees
GROUP BY job_id;
Проблема заключалась в том, что вы группировались не только по job_id, но и по зарплате, что не позволяло вам получить сумму и среднюю зарплату для этого job_id (среднее значение не было для этого job_id, но для этого job_id И этой зарплаты aka он получал ту же зарплату).
Кроме того, MAX не требуется для подсчета количества вхождений этого job_id.
Надеюсь, помог :)
Большое спасибо! и объясняя это, я не видел этой проблемы. СПАСИБО
Нет проблем, рад помочь :)
@Pengu К сожалению, нельзя назначить более одного ответа правильным. Если бы вы могли вернуться к назначению моего ответа как правильного, я был бы признателен, так как он правильный и первый опубликован (вы можете увидеть более старый ответ, отсортировав его по заголовку «раздел ответов».
конечно, извините, я не был уверен, как это работает, но я назначил ваш как правильный :) Большое вам спасибо
У вас более одной ошибки. Практически ни одна база данных не поддерживает вложенные функции агрегирования. Во-вторых, у вас есть SALARY в GROUP BY. Это не имеет смысла, потому что вам нужны расчеты на SALARY.
Итак, запрос, предположительно, больше похож на:
SELECT JOB_ID, COUNT(*) AS "NO. OF JOB_ID", SUM(SALARY), AVG(SALARY)
FROM EMPLOYEES e
GROUP BY JOB_ID;
Если вы хотите, чтобы результаты были в определенном порядке (например, по COUNT(*), вам следует включить явный ORDER BY.
Большое вам спасибо, я просто запутался, потому что он всегда показывает ошибку, когда я использую функцию GROUP BY, и я не включаю ее в GROUP BY. Спасибо
Вы также сгруппировали результат с полем зарплаты, которое также используется в расчетах. Вам просто нужно удалить поле из группы, и оно будет работать как шарм.
SELECT JOB_ID, COUNT(*) AS "NO. OF JOB_ID", SUM(SALARY) as "SUM(SALARY)", AVG(SALARY) as "AVG(SALARY)" FROM EMPLOYEES GROUP BY JOB_ID
большое спасибо за то, что нашли время ответить и помогли мне
да, я за тебя проголосовал! но у меня только менее 15 репутации, и это не позволяет мне позволять этому оставаться.
о, не беспокойтесь :)
Удалите
SALARYизGROUP BY.