Так что у меня такая проблема. У меня уже есть результат, который я хотел, но я хочу найти лучший способ его решить. Я хочу рассчитать количество проданных продуктов с количеством атрибутов этого продукта.
Сначала я создал новую таблицу для статистики.
drop table if exists stat1 cascade;
create table stat1(
id serial primary key,
products integer,
numberOfAtributtes integer
);
Здесь я рассчитываю продукты, которые находятся в корзине заказов, а также атрибуты манца, которые имеет этот продукт.
В конце я вставляю данные в созданную таблицу stat1.
with data as(
(select k.product_id as pp, count( ap.atribut_id) as numberOfAtributes from productAtributes as ap
JOIN cart k ON k.product_id = ap.product_id
GROUP BY k.product_id) )
insert into stat1(pp, numberOfAtributes)
select pp , numberOfAtributes from data;
Это вывод, который я вставляю в таблицу stat1.
И, наконец, третий запрос, который я выполняю, — это подсчет количества проданных продуктов manz с одинаковым количеством атрибутов.
select count(numberOfAtributes), numberOfAtributes
from stat1
group by numberOfAtributes;
Заданный и (ожидаемый) результат:
Можно ли сократить его до одного запроса (может быть, с помощью подзапроса? Я пытался, но это не сработало), поэтому без создания дополнительной таблицы stat1?
Использование простого CTE вместо временной таблицы должно работать (не проверено):
with stat1(products, numberOfAtributes) as (
select k.product_id as pp, count( ap.atribut_id) as numberOfAtributes from productAtributes as ap
JOIN cart k ON k.product_id = ap.product_id
GROUP BY k.product_id )
select count(numberOfAtributes), numberOfAtributes
from stat1
group by numberOfAtributes;