Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите пожалуйста решить задачу  [new]
cglcz
Member

Откуда:
Сообщений: 33
Есть три таблицы:

CREATE TABLE departments (
id INT NOT NULL,
departments_name varchar (50) NULL,
PRIMARY KEY (id)
);



CREATE TABLE employees (
id int NOT NULL,
first_name varchar(50) NULL,
last_name varchar(50) NULL,
department_id int NULL,
salary money NULL,
PRIMARY KEY (id),
FOREIGN KEY (department_id) REFERENCES departments (id)
);



CREATE TABLE sales (
employee_id int NOT NULL,
sales_time datetime NOT NULL,
amount money NULL,
PRIMARY KEY (employee_id, sales_time),
FOREIGN KEY (employee_id) REFERENCES employees (id)
);


Условие задачи звучит так:
Вывести список названий отделов прибыль КАЖДОГО из сотрудников которого составляет больше 10000.

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

WITH Result AS
(SELECT dep.departments_name, emp.first_name, SUM(s.amount) AS Total_amount
FROM departments dep
LEFT JOIN employees emp
ON dep.id = emp.department_id
LEFT JOIN sales s
ON s.employee_id = emp.id
GROUP BY emp.first_name, dep.departments_name)
SELECT *
FROM Result
WHERE Total_amount > 10000;
13 май 18, 18:24    [21406561]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста решить задачу  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
Проще говоря, надо вывести отделы, в которых нет сотрудника с прибылью не больше 10000.
"Не существует" реализуется, например, предикатом NOT EXISTS().
И дополнительно проверить, что в отделе больше 0 сотрудников.
13 май 18, 18:29    [21406565]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста решить задачу  [new]
cglcz
Member

Откуда:
Сообщений: 33
iap,
помогите чуть с селектом пожалуйста, че-то в голове уже такая каша, не могу все в кучу сложить
13 май 18, 18:34    [21406568]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста решить задачу  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
cglcz,

select
 *
from
 departments d
where
 not exists(select 1 from employees where department_id = d.id and salary <= 10000);
13 май 18, 18:46    [21406579]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста решить задачу  [new]
cglcz
Member

Откуда:
Сообщений: 33
invm, спасибо большое) Голова что-то не варит совсем
13 май 18, 18:53    [21406589]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить