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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д