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)
Листинг программы
  1. SELECT workers.SURNAME, workers.FIRST_NAME, workers.MIDDLE_NAME
  2. FROM workers
  3. WHERE workers.WORKER_CODE IN
  4. (SELECT sale.WORKER_CODE
  5. FROM sale
  6. WHERE sale.SALE_DATE BETWEEN '2017-02-01' AND '2017-02-28')
Результат: SURNAME | FIRST_NAME | MIDDLE_NAME Сидорчук |Анатолий |Николаевич Радулов |Артём |Евгеньевич 2)
Листинг программы
  1. (SELECT sale.WORKER_CODE, workers.SURNAME, workers.FIRST_NAME, workers.MIDDLE_NAME, SUM(sale.NUMBER)
  2. FROM sale, workers
  3. WHERE sale.WORKER_CODE = '003102' AND
  4. sale.WORKER_CODE = workers.WORKER_CODE AND
  5. sale.SALE_DATE BETWEEN '2017-02-01' AND '2017-02-28')
  6. UNION
  7. (SELECT sale.WORKER_CODE, workers.SURNAME, workers.FIRST_NAME, workers.MIDDLE_NAME, SUM(sale.NUMBER)
  8. FROM sale, workers
  9. WHERE sale.WORKER_CODE = '003103' AND
  10. sale.WORKER_CODE = workers.WORKER_CODE AND
  11. sale.SALE_DATE BETWEEN '2017-02-01' AND '2017-02-28')
Результат: 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 Подскажите, пожалуйста, как правильнее написать запрос, чтобы получить желаемый результат.

Решение задачи: «MySQL Запрос с использованием SUM, JOIN»

textual
Листинг программы
  1. SELECT
  2.   Workers.worker_code,  surname, first_name, middle_name, SaleNumber
  3. FROM (
  4.  
  5.   SELECT worker_code, SUM(number) as SaleNumber
  6.   FROM  Sale
  7.   WHERE SALE_DATE BETWEEN '2017-02-01' AND '2017-02-28'
  8.   GROUP BY worker_code
  9.   HAVING  SUM(number) = (
  10.     SELECT MAX(Cnt)
  11.     FROM  (
  12.       SELECT worker_code,  SUM(number) Cnt
  13.       FROM Sale
  14.       WHERE SALE_DATE BETWEEN '2017-02-01' AND '2017-02-28'
  15.       GROUP BY worker_code
  16.     ) as summary
  17.   )
  18. ) as best
  19.   JOIN Workers  ON Workers.worker_code = best.worker_code

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут