История продаж, задачи на собеседовании по sql

By | May 4, 2015

Я Очень люблю язык sql и когда мне дают задачку я в душе радуюсь. Одна из причин, это развитие. К каждой задаче можно подойти творчески и решить её многочисленными методами.

История продаж

Имеем таблицу “sales_history”:

CREATE TABLE `sales_history` (
`order_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`manager_id` int(10) unsigned NOT NULL,
`amount` int(10) unsigned NOT NULL DEFAULT '0',
`order_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`order_id`),
KEY `manager_id` (`manager_id`)
) ENGINE=InnoDB;

в которую после каждой продажи заносится информация о заказе: id менеджера , сумма заказа (amount) , дата заказа.

Выбрать список сотрудников, у которых средняя стоимость заказов за последние 3 месяца выше, чем общая средняя стоимость заказов за последние 3 месяца.

Ответ:

SELECT `manager_id`, avg(`amount`)
FROM `sales_history`
WHERE `order_date`
BETWEEN DATE_SUB(NOW() , INTERVAL 3
MONTH)
AND NOW() GROUP BY `manager_id` HAVING avg(`amount`) > (SELECT avg( `amount` ) FROM `sales_history` 
WHERE `order_date` BETWEEN DATE_SUB(NOW() , INTERVAL 3
MONTH)
AND NOW());

 

Удачи.

Category: Uncategorized