Я не знаю, как исправить эти упражнения SQL - PullRequest
0 голосов
/ 19 марта 2019

Я использую ORACLE, и эти запросы выполняются в схеме HR. Моя проблема в том, что эти запросы не идеальны, и я заблудился и не знаю, как продолжить. (Пожалуйста, не будь груб, как делать домашнее задание, потому что я спрашиваю только тогда, когда я попробовал материал). Кстати, заявления на испанском, но я их перевел.

1. Номинальный номер депо и номер департамента де-лос-эмплеадос-де-суперан-де-ла-медиа-де-департамент высшей категории.
АНГЛИЙСКИЙ: Имя сотрудника и название отдела сотрудников, которые превышают среднюю зарплату отдела, к которому они принадлежат.

select e.first_name, e.last_name, d.department_name
    from employees e
    INNER JOIN departments d ON e.department_id = d.department_id
    where salary > (select avg(salary)
                        from employees
                        where department_id = department_id);
  1. Empleados que, en cada departamento, Тинен-эль-Суэльдо-Максимо.
    АНГЛИЙСКИЙ: Сотрудники, у которых в каждом отделении максимальная зарплата
select e.employee_id
    from employees e
    INNER JOIN departments d ON e.department_id = d.department_id
    where salary = (select hire_date
                        from employees
                        where employee_id = 107);
  1. Empleados que trabajen en departamentos en los que nadie cobre commisiones.
    АНГЛИЙСКИЙ: Сотрудники, работающие в отделах, где никто не взимает комиссию
select e.employee_id
    from employees e
    INNER JOIN departments d ON e.department_id = d.department_id
    where commission_pct = (select sum(commission_pct)
                                from employees
                                group by department_id
                                having sum(commission_pct) = 0);
  1. Para cada departamento que tenga 3 o más trabajadores, калькуляция всех итоговых сумм, итоговых итоговых сумм Нумеро де Трабахадорес. Мострар-эль-номбар-дель-департамент и лас 3 кантидады.
    АНГЛИЙСКИЙ: Для каждого отдела, в котором работают 3 или более работников, рассчитайте общую заработную плату, сумму комиссий и количество работников. Покажите название отдела и 3 количества
select sum(e.salary), sum(e.commission_pct), count(e.employee_id), d.department_name
    from employees e
    INNER JOIN departments d ON e.department_id = d.department_id
    where count(e.employee_id) >= 3;

1 Ответ

2 голосов
/ 19 марта 2019

В большинстве случаев вы довольно близки.


По состоянию на 1: вы должны всегда использовать псевдонимы таблиц. Если вы этого не сделаете, результат будет непредсказуемым и, скорее всего, неверным. Должно быть:

select e.first_name, e.last_name, d.department_name
    from employees e
    INNER JOIN departments d ON e.department_id = d.department_id
    where e.salary > (select avg(e1.salary)
                        from employees e1
                        where e1.department_id = d.department_id);  --> aliases, especially here!

По состоянию на 5: ваш запрос не имеет смысла; как насчет этого?

select d.department_name, e.employee_id
from employees e INNER JOIN departments d ON e.department_id = d.department_id
where e.salary = (select max(e1.salary) 
                  from employees e1
                  where e1.department_id = d.department_id);

По состоянию на 8:

select e.employee_id, d.department_name
    from employees e
    INNER JOIN departments d ON e.department_id = d.department_id
where e.department_id in (select e1.department_id
                          from employees e1
                          group by e1.department_id
                          having sum(commission_pct) is null;

По состоянию на 10:

select sum(e.salary), sum(e.commission_pct), count(e.employee_id), d.department_name
    from employees e
    INNER JOIN departments d ON e.department_id = d.department_id
    group by d.department_name
    having count(*) >= 3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...