Среднее значение SQL для подмножества столбца

#sql #postgresql

#sql #postgresql

Вопрос:

Укажите таблицу «магазин»

 [product] [type] [price]
pen         A       10
glasses     B       20 
lipstick    A       30
 

Есть ли способ найти список продуктов (будь то A или B), цена которых меньше или равна средней цене или типу A?

 [product] [price]
pen         10
glasses     20 
 

Я попробовал следующее:

 SELECT product, price
FROM shop
WHERE price <= avg(price) AND type = 'A'
 

Ответ №1:

Используйте подзапрос, чтобы найти среднюю цену товаров типа A:

 SELECT product, price
FROM shop
WHERE price <= (SELECT AVG(price) FROM shop WHERE type = 'A');
 

Просто для развлечения, мы могли бы также использовать аналитические функции здесь:

 WITH cte AS (
    SELECT *, AVG(price) FILTER (WHERE type = 'A') OVER () avg_price_a
    FROM shop
)

SELECT product, price
FROM cte
WHERE price <= avg_price_a;
 


ДЕМОНСТРАЦИЯ