Запрос для получения информации о пользователе, чья корзина покупок больше среднего значения от всех пользователей

#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 в вашей группе по операторам