如何将两个单独的查询转换为一个长子选择

how to transfrom two separate queries into one long subselect

所以我有这样的问题。我已经有了我想要的输出,但我想得到更好的方法来解决它。 我想用这个产品的属性数来计算销售的产品数量。

首先我创建了一个新的table用于统计。

drop table if exists stat1 cascade;
create table stat1(
    id serial primary key,
    products integer,
    numberOfAtributtes integer
);

我在这里计算订单购物车中的产品以及该产品具有的 manz 属性。
最后,我将数据插入到创建的 table 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;

这就是我插入到 table stat1 中的输出。

最后,我正在执行的第三个查询是计算具有相同属性数量的 manz 产品的销售量。

select count(numberOfAtributes), numberOfAtributes
from stat1
group by numberOfAtributes;

给定和(预期)输出是:

是否可以将其缩短为一个查询(也许使用子选择?我试过但没有用),所以不创建附加 table stat1?

使用简单的 CTE 而不是临时的 table 应该可行(未测试):

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;