В этой таблице, которая показывает сотрудников в компании: создать таблицу сотрудников (id int первичный ключ, позиция varchar не null, salary int не null); Примечание: сотрудников увеличилось ...
2 ответа
Вот решение вашего запроса. Есть несколько способов получить требуемые результаты.
SELECT count(*) as 'Seniors' FROM (SELECT id, position, salary, (SELECT SUM(salary) from employees WHERE id < e1.id) as total FROM employees e1)
WHERE total <= 50000 AND position = 'senior';
SELECT COUNT(*) AS 'Juniors' FROM (SELECT id, position, salary, (SELECT SUM(salary) FROM employees WHERE id < e1.id) as total FROM employees e1)
WHERE total <= (50000 - (SELECT SUM(salary) from (SELECT id, position, salary, (SELECT SUM(salary) FROM employees WHERE id < e2.id) as total FROM employees e2)
WHERE total <= 50000 AND position = 'senior')) AND position = 'junior';
Вы также можете использовать процедуру, но я предпочитаю, чтобы этот запрос упростил вам запуск вместо функций и процедур.
Вы можете сделать это с помощью одного запроса. Это немного сложно, но на самом деле логика довольно проста:
- Рассчитайте текущую зарплату пожилых людей, от минимальной до максимальной.
- Выберите всех пожилых людей меньше пороговой суммы.
- Рассчитайте текущую зарплату для юниоров, от самой низкой до самой высокой.
- Выбирайте всех юниоров меньше оставшейся суммы.
- Объедините две группы.
В SQL это выглядит так:
with seniors as (
select e.*
from (select e.*,
sum(salary) over (order by salary) as running_salary
from employees e
where position = 'senior'
) e
where running_salary <= @amount
),
juniors as (
select e.*
from (select e.*,
sum(salary) over (order by salary) as running_salary
from employees e
where position = 'junior'
) e cross join
(select max(running_salary) as senior_salaries from seniors) s
where running_salary <= (@amount - s.senior_salaries)
)
select s.*
from seniors s
union all
select j.*
from juniors j;
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.