使用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。