如何将两个单独的查询转换为一个长子选择
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;
所以我有这样的问题。我已经有了我想要的输出,但我想得到更好的方法来解决它。 我想用这个产品的属性数来计算销售的产品数量。
首先我创建了一个新的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;