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)
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')
Результат: SURNAME | FIRST_NAME | MIDDLE_NAME Сидорчук |Анатолий |Николаевич Радулов |Артём |Евгеньевич 2)
(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')
Результат: 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
Листинг программы
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

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


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

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

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