Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте!
Есть три таблицы order,order_line, product,
нужно обратится с прямым запросом что бы получилось как на фото
Где Name - имя покупателя, Result - два наибольших заказа через запятую, слева id заказа и справа - сумма по заказу, колонка TotalSumPerCustomer - показывает общую сумму покупок клиента.
У меня проблемы со средним столбцом, так что бы оставить два самых больших сапроса(не более двух)
SELECT o.customer_name, GROUP_CONCAT(CONCAT_WS(' - ', ol.order_id, p.price) ORDER BY p.price DESC SEPARATOR ' , ')
FROM .order o
LEFT JOIN order_line ol
ON o.id = ol.order_id
LEFT JOIN product p
ON ol.product_id = p.id
GROUP BY o.customer_name
c таким дампом:
Отредактированно Valdimar (25.03.2018 02:32:32)
Неактивен
Name Result TotalSumPerCustumer
1 Linda 12 -1996.99, 11 - 686.93 3276.66
2 Bob 10 -929.90, 9 - 621.53 2120.57
3 Anna 7 - 1309.87, 4 - 92.99 1402.86
4 John 2 - 1373.85 1373.85
5 Jane 6 - 717.93, 8 - 305.97 1223.88
Фото не загрузилось
Неактивен
Неактивен
какой же он огромен :mad
Vasya ты спас только три дня жизни моей, +100500 в твою карму!
....как часто в твоей жизни на работе приходится работать с такими запросами?
Неактивен
Valdimar написал:
какой же он огромен :mad
давайте ещё немного увеличим
чтобы правильно обрабатывался случай, когда у пользователя два заказа с одинаковой максимальной стоимостью
Неактивен
vasya написал:
Valdimar написал:
какой же он огромен :mad
давайте ещё немного увеличим
чтобы правильно обрабатывался случай, когда у пользователя два заказа с одинаковой максимальной стоимостьюselect customer_name,
(select concat(t1.order_id, ' - ', t1.order_sum, ',', ifnull(t2.order_id,''), ' - ', ifnull(t2.order_sum,'')) from
(select customer_name, order_id, order_sum from `order` join
(select `order_id`, sum(`quantity` * `price`) order_sum
from `order_line` join `product` on `product`.id = `order_line`.product_id
group by `order_id`) t on `order`.id = t.order_id) t1
left join
(select customer_name, order_id, order_sum from `order` join
(select `order_id`, sum(`quantity` * `price`) order_sum
from `order_line` join `product` on `product`.id = `order_line`.product_id
group by `order_id`) t on `order`.id = t.order_id) t2
on t1.customer_name=t2.customer_name and t1.order_sum>=t2.order_sum and t1.order_id <> t2.order_id
where t1.customer_name = t3.customer_name
order by t1.customer_name, t1.order_sum desc, t2.order_sum desc limit 1) col2,
sum(order_sum) total_sum_client from
(select customer_name, t.* from `order` join
(select `order_id`, sum(`quantity` * `price`) order_sum
from `order_line` join `product` on `product`.id = `order_line`.product_id
group by `order_id`) t on `order`.id = t.order_id) t3
group by customer_name
Вот с изменёнными названиями как в таблице и....
select customer_name AS Name,
(select concat(t1.order_id, ' - ', t1.order_sum, ',', ifnull(t2.order_id,''), ' - ', ifnull(t2.order_sum,'')) from
(select customer_name, order_id, order_sum from `order` join
(select `order_id`, sum(`quantity` * `price`) order_sum
from `order_line` join `product` on `product`.id = `order_line`.product_id
group by `order_id`) t on `order`.id = t.order_id) t1
left join
(select customer_name, order_id, order_sum from `order` join
(select `order_id`, sum(`quantity` * `price`) order_sum
from `order_line` join `product` on `product`.id = `order_line`.product_id
group by `order_id`) t on `order`.id = t.order_id) t2
on t1.customer_name=t2.customer_name and t1.order_sum>=t2.order_sum and t1.order_id <> t2.order_id
where t1.customer_name = t3.customer_name
order by t1.customer_name, t1.order_sum desc, t2.order_sum desc limit 1) Result,
sum(order_sum) TotalSumPerSecond from
(select customer_name, t.* from `order` join
(select `order_id`, sum(`quantity` * `price`) order_sum
from `order_line` join `product` on `product`.id = `order_line`.product_id
group by `order_id`) t on `order`.id = t.order_id) t3
group by customer_name
.....сейчас отсортирую по Desc
Неактивен