SQL:如何创建查询以按订单ID及其中的产品对数据库进行排序

问题描述 投票:-2回答:2

我目前处于一种无法想出办法的局面。为了解释我的问题,我将首先发布我正在使用的数据库的一个非常简化的版本:

  ID:   Place:   Product:
111111    1     Product A   
222222    1     Product A   
222222    2     Product B   
333333    1     Product A   
444444    1     Product A   
444444    2     Product B   
444444    3     Product C   
555555    1     Product A   

提到了3列以上。第一列“ID:”表示每个订单的唯一ID。第二个“地点:”表示订单中某个项目的位置。如果订单仅由1个产品组成,则数据库中只有一行对应:

111111    1     Product A

如果订单中包含两个或更多产品,则“ID:”列中的数据库中将有两行或更多行具有相同的值,“Place:”列将表示订单中项目的位置。

222222    1     Product A   
222222    2     Product B
-------------------------
444444    1     Product A   
444444    2     Product B   
444444    3     Product C

第三栏“产品:”非常明显 - 它代表了产品的名称。

我的问题如下:

是否可以进行查询以查找不同类型的订单并对其进行计数?例如,如果订单仅由“产品A”组成,则这应该是唯一的订单类型。如果订单包含位置1的“产品A”和位置2的“产品B”(反之亦然),那么这也是一个独特的订单。它应该如下所示:

    Type:       Count()
  Product A       3
 Product A,B      1
Product A,B,C     1

我尝试了很多查询,但我得到的结果远非我想要的。任何提示都将非常感谢!

如果答案容易或明显,我道歉。我对SQL还不是很熟悉。

先谢谢你,Petar

sql
2个回答
0
投票

如果您使用的是mysql,则可以使用group_concat函数,并运行如下查询:

select type, count(1) from 
(
SELECT group_concat(PRODUCT ORDER BY PRODUCT) type 
FROM products
GROUP BY ID
) a
group by type;

但我必须警告你,这个查询将使用临时和filesort执行


0
投票

(选择count(Product)作为cnt1,来自test1 GROUP BY ID的ID)

请分享您想要显示的输出。可能这会对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.