#mysql #sql #group-by
#mysql #sql #группировка по
Вопрос:
Мне нужно написать запрос, чтобы получить список клиентов, где сумма всех заказов больше среднего значения среди всех клиентов. Мне не разрешено использовать подзапросы
select id_client, surname, id_order, data, count(*) as position_t, sum(shop_quantity) as quantity,
sum(shop_quantity*d.price) as summa_order, (select avg(shop_quantity*d.price) from shopping_cart join product d on id_product = fk_product) as average
from client a
join `order` b on id_client = fk_client
join shopping_cart c on id_order = fk_order
join product d on id_product = fk_product
join catalog e on id_catalog = fk_catalog
group by id_order
having summa_order > average
order by summa_order desc;
Это должно быть что-то вроде этого, но без подзапроса. Как это написать?
Вывод здесь:
Примечание: другие агрегированные функции также должны работать (сумма, количество)
Ответ №1:
вы можете использовать функции агрегирования :
select
id_client
, surname
, id_order
, data
, count(*) as position_t
, sum(shop_quantity) as quantity
, SUM(shop_quantity*d.price) as summa_order
, AVG(shop_quantity*d.price) OVER ( PARTITION BY shopping_cart.id_product) AS average
from client a
join `order` b
on id_client = fk_client
join shopping_cart c
on id_order = fk_order
join product d
on id_product = fk_product
join catalog e
on id_catalog = fk_catalog
group by id_order
having summa_order > average
order by summa_order desc;
Я не менял group by, но вам нужны все неагрегированные столбцы из select в вашей группе по операторам