MySQL Запрос с использованием SUM, JOIN
Формулировка задачи:
Доброго времени суток, товарищи!
Есть две таблицы:
1) Workers (сотрудники) (worker_code, surname, first_name, middle_name, post, birthdate, address, phone)
(код сотрудника, фамилия, имя, отчество, должность, дата рождения, адрес, телефон)
2) Sale(продажа) (sale_code, product_code, worker_code, sale_date, number)
(код продажи, код товара, код сотрудника, дата продажи, количество)
Необходимо вывести самого успешного продавца в период с 01-02-2017 по 28-02-2017.
Бьюсь уже неделю с этим запросом.
Пока только крутятся два запроса:
1)
Результат:
SURNAME | FIRST_NAME | MIDDLE_NAME
Сидорчук |Анатолий |Николаевич
Радулов |Артём |Евгеньевич
2)
Результат:
WORKER_CODE | SURNAME | FIRST_NAME | MIDDLE_NAME | SUM(sale.NUMBER)
003102 |Сидорчук |Анатолий |Николаевич |9
003103 |Радулов |Артём |Евгеньевич |23
А необходим следующий результат:
WORKER_CODE | SURNAME | FIRST_NAME | MIDDLE_NAME | SUM(sale.NUMBER)
003103 |Радулов |Артём |Евгеньевич |23
Подскажите, пожалуйста, как правильнее написать запрос, чтобы получить желаемый результат.
SELECT workers.SURNAME, workers.FIRST_NAME, workers.MIDDLE_NAME FROM workers WHERE workers.WORKER_CODE IN (SELECT sale.WORKER_CODE FROM sale WHERE sale.SALE_DATE BETWEEN '2017-02-01' AND '2017-02-28')
(SELECT sale.WORKER_CODE, workers.SURNAME, workers.FIRST_NAME, workers.MIDDLE_NAME, SUM(sale.NUMBER) FROM sale, workers WHERE sale.WORKER_CODE = '003102' AND sale.WORKER_CODE = workers.WORKER_CODE AND sale.SALE_DATE BETWEEN '2017-02-01' AND '2017-02-28') UNION (SELECT sale.WORKER_CODE, workers.SURNAME, workers.FIRST_NAME, workers.MIDDLE_NAME, SUM(sale.NUMBER) FROM sale, workers WHERE sale.WORKER_CODE = '003103' AND sale.WORKER_CODE = workers.WORKER_CODE AND sale.SALE_DATE BETWEEN '2017-02-01' AND '2017-02-28')
Решение задачи: «MySQL Запрос с использованием SUM, JOIN»
textual
Листинг программы
SELECT Workers.worker_code, surname, first_name, middle_name, SaleNumber FROM ( SELECT worker_code, SUM(number) as SaleNumber FROM Sale WHERE SALE_DATE BETWEEN '2017-02-01' AND '2017-02-28' GROUP BY worker_code HAVING SUM(number) = ( SELECT MAX(Cnt) FROM ( SELECT worker_code, SUM(number) Cnt FROM Sale WHERE SALE_DATE BETWEEN '2017-02-01' AND '2017-02-28' GROUP BY worker_code ) as summary ) ) as best JOIN Workers ON Workers.worker_code = best.worker_code
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д