Как использовать вложенные запросы в mysql - PullRequest
0 голосов
/ 15 апреля 2020

Первый - это employee таблица, второй - works_with таблица

emp_id - это внешний ключ в таблице works_with.

Что Я хочу найти имя и фамилию, чей общий объем продаж превышает 100 000.

Например, в первой таблице emp_id 105 человек имеют общий объем продаж 110 000.

Итак Я хочу, чтобы на выходе были имя и фамилия emp_id 102, 104, 105 (общий объем продаж которых превышает 100 000).

Я попытался выполнить несколько вложенных запросов и не смог.

Сбой кода :

SELECT employee.first_name, employee.last_name
FROM employee
WHERE employee.emp_id IN(
    SELECT works_with.emp_id, sum(total_sales)
    FROM works_with
    WHERE works_with.total_sales > 100000
    GROUP BY works_with.emp_id);

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

при использовании WHERE-IN вы должны выбрать только один столбец в подзапросе и использовать агрегатные функции для сравнения в предложении HAVING, с которым они не работают WHERE.

SELECT employee.first_name, employee.last_name
FROM employee
WHERE employee.emp_id IN(
    SELECT works_with.emp_id
    FROM works_with
    GROUP BY works_with.emp_id
    HAVING SUM(total_sales) > 100000
)

, также вы можете используйте INNER JOIN, чтобы получить тот же результат

SELECT employee.first_name, employee.last_name,SUM(total_sales) as total_sales
FROM employee
INNER JOIN works_with ON employee.emp_id = works_with.emp_id
GROUP BY employee.emp_id
HAVING total_sales > 100000
0 голосов
/ 15 апреля 2020

Используйте JOIN вместо WHERE-IN. И вам нужно проверить сумму всех продаж, а не отдельных продаж. Вы можете сделать это, используя HAVING.

SELECT e.first_name, e.last_name
FROM employee AS e
JOIN works_with AS w ON e.emp_id = w.emp_id
GROUP BY e.emp_id
HAVING SUM(w.total_sales) > 100000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...