#sql #sql-server-2019
#sql #sql-сервер-2019
Вопрос:
Я пытаюсь (SQL Server 2019) изменить номер отдела «СААВЕДРА». Новый отдел будет отделом с наибольшим количеством сотрудников, чья работа является «СОТРУДНИКОМ»
Я только что сделал следующий запрос, но у меня ошибка:
Невозможно выполнить агрегатную функцию для выражения, содержащего агрегат или подзапрос.
UPDATE EMPLE SET DEPT_NO = (SELECT DEPT_NO FROM EMPLE WHERE JOB='EMPLOYEE' GROUP BY DEPT_NO HAVING COUNT(SURNAME)= (SELECT MAX(COUNT(SURNAME)) FROM EMPLE WHERE JOB='EMPLOYEE' GROUP BY DEPT_NO)) WHERE SURNAME='SAAVEDRA';
Может ли кто-нибудь помочь мне с этой ошибкой?
заранее спасибо
Комментарии:
1. Отметьте конкретные СУБД, которые вы используете, так как ответ может быть разным для каждой из них.
2. Я использую SQL Server 2019
3. Ошибка означает, что вы не можете использовать две агрегатные функции (
MAX
иCOUNT
) в одном расчетеMAX(COUNT(SURNAME))
. Вы, вероятно, захотите выбратьCOUNT
букву s в подзапросе, а затем получитьMAX
от этого.
Ответ №1:
Попробуй
UPDATE EMPLE SET DEPT_NO = (SELECT top(1) e2.DEPT_NO FROM EMPLE e2 WHERE e2.JOB='EMPLOYEE' GROUP BY e2.DEPT_NO order by COUNT(e2.SURNAME) desc) WHERE SURNAME='SAAVEDRA'
Ответ №2:
Почему бы не внести небольшие изменения?..
ОБНОВИТЬ EMPLE
SET DEPT_NO = (SELECT TOP 1 DEPT_NO FROM EMPLE WHERE JOB='EMPLOYEE' GROUP BY DEPT_NO ORDER BY COUNT(SURNAME) DESC ) WHERE SURNAME='SAAVEDRA';
Выполнив внутренний запрос к порядку по УБЫВАНИЮ количества и применив 1-е место, должно сработать.