Почему я не могу сделать это обновление?

#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-е место, должно сработать.