使用PostgreSQL中的值集分组
我有一个使用PostgreSQL中的值集分组,sql,postgresql,Sql,Postgresql,我有一个产品表: productid product 1 A-110 2 B-110 3 C-400 4 D-401 orderitemid productid qty 1 1 10 2 2 10 3 3 10 4 3 10 5
产品
表:
productid product
1 A-110
2 B-110
3 C-400
4 D-401
orderitemid productid qty
1 1 10
2 2 10
3 3 10
4 3 10
5 4 10
和orderditems
表格:
productid product
1 A-110
2 B-110
3 C-400
4 D-401
orderitemid productid qty
1 1 10
2 2 10
3 3 10
4 3 10
5 4 10
我可以根据以下产品进行分组:
select productid, sum(qty)
from ordereditems
group by productid
其中:
1 10
2 10
3 20
4 10
但是,对于此查询,productid 1和2、3和4是相同的。
意思是我想看:
1 + 2 20
3 + 4 30
基本上,我希望查询理解1和2是同一组,3和4是同一组
我该怎么做
编辑:
产品1和2、3和4不一样。但是他们是同一个家庭的。。。我想看看我们每个家庭的销售量,而不是每个产品。
这就是为什么期望的输出是:
1 + 2 20
3 + 4 30
如果你知道1和2是相同的,而3和4是相同的,并且这些是唯一相同的东西,那么这就是黑客版本
select
case
when productid in (1,2) then '1 + 2'
when productid in (3,4) then '3 + 4'
else productid
end as product_ids, sum(qty)
from ordereditems
group by
case
when productid in (1,2) then '1 + 2'
when productid in (3,4) then '3 + 4'
else productid
end
更好的方法是在数据库中记录两种产品是相同的。通过将重复产品(2,4)链接到与(1,3)相同的产品,或者创建新的表族等,并记录产品1,2与同一系列相关
家族
familyid name
1 1+2
2 3+4
扩展产品表
productid product familyid
1 A-110 1
2 B-110 1
3 C-400 2
4 D-401 2
然后你可以分组讨论家庭问题
select f.name, sum(qty)
from ordereditems oi
inner join product p on oi.productid = p.productid
inner join family f on p.familyid = f.familyid
group by f.name
如果你知道1和2是相同的,而3和4是相同的,并且这些是唯一相同的东西,那么这就是黑客版本
select
case
when productid in (1,2) then '1 + 2'
when productid in (3,4) then '3 + 4'
else productid
end as product_ids, sum(qty)
from ordereditems
group by
case
when productid in (1,2) then '1 + 2'
when productid in (3,4) then '3 + 4'
else productid
end
更好的方法是在数据库中记录两种产品是相同的。通过将复制的产品(2,4)链接到与(1,3)相同的产品,或者通过创建新的表族等,并记录产品1,2与同一族相关
家族
familyid name
1 1+2
2 3+4
扩展产品表
productid product familyid
1 A-110 1
2 B-110 1
3 C-400 2
4 D-401 2
然后你可以分组讨论家庭问题
select f.name, sum(qty)
from ordereditems oi
inner join product p on oi.productid = p.productid
inner join family f on p.familyid = f.familyid
group by f.name
请在您的表格中添加GroupID/类别字段
productid product GroupID
1 A-110 A
2 B-110 A
3 C-400 B
4 D-401 B
然后使用查询
select GroupID, sum(qty) as Sold
from ordereditems
group by GroupID
这将表现为团体销售,就好像您的productid将串通了解一个团体中有10个以上的产品一样
如果对您有效,请标记为“有帮助…” 请在您的表格中添加GroupID/类别字段
productid product GroupID
1 A-110 A
2 B-110 A
3 C-400 B
4 D-401 B
然后使用查询
select GroupID, sum(qty) as Sold
from ordereditems
group by GroupID
这将表现为团体销售,就好像您的productid将串通了解一个团体中有10个以上的产品一样
如果对您有效,请标记为“有帮助…” 整数除以2,某处。为什么“productid 1和2,3和4是相同的”?..@VaoTsun它们不是,但对于这个查询,它们是相同的。B-110与A-110属于同一家族。我想知道我们从相同的家族中销售了多少。您如何指定家族?@avi,如果他们属于相同的家族,您必须使用另一列来表示家族树,然后使用该列来
知道我们从相同的家族中销售了多少。
整数除以2,为什么“productid 1和2,3和4是相同的”?..@VaoTsun它们不是,但对于这个查询,它们是相同的。B-110与A-110属于同一家族。我想知道我们从相同的家族中销售了多少。您如何指定家族?@avi,如果他们属于相同的家族,您必须使用另一列来表示家族树,然后使用该列来了解我们从相同的家族中销售了多少。
用户不想添加另一列。他只需要具有现有架构的sol。用户不想添加其他列。他只需要具备现有架构的sol。