Помогите с запросом[MS SQL2008]
От: Kaifa Россия  
Дата: 07.02.19 10:39
Оценка:
Есть таблица сотрудников и департамент

CREATE TABLE Employee(id INT PRIMARY KEY CLUSTERED, name VARCHAR(255), salary DECIMAL(19,2), department_id INT)
CREATE TABLE Department(id INT PRIMARY KEY CLUSTERED, name CHAR(255))
ALTER TABLE Employee WITH CHECK ADD CONSTRAINT fk_dep FOREIGN KEY(department_id) REFERENCES dbo.Department(id)
ALTER TABLE Employee WITH CHECK ADD CONSTRAINT fk_emp FOREIGN KEY(chief_id) REFERENCES dbo.Employee(id)


нужно выбрать названия отделов, где самая большая суммарная зп по отделу. я, конечно, написал, но мне кажется можно куда красивше.
напрямую не сказано что нельзя использовать временные таблицы, но я не использую. хотя здесь прямо напрашивается использование. в общем мой вариант:

select 
    dep.NAME 
from (
    select 
        emp.department_id as dep_id, 
        SUM(emp.salary) as sal
    from dbo.Employee emp with(nolock)
    where 
        emp.department_id is not null
    group by emp.department_id
) d
join dbo.department dep with(nolock) on dep.id = d.dep_id
where sal = (
    select 
        max(sal) as sal
    from (
        select 
            emp.department_id as dep_id, 
            SUM(emp.salary) as sal
        from dbo.Employee emp with(nolock)
        where 
            emp.department_id is not null
        group by emp.department_id
    ) d
)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.