我目前处于一种无法想出办法的局面。为了解释我的问题,我将首先发布我正在使用的数据库的一个非常简化的版本:
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
如果您使用的是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执行
(选择count(Product)作为cnt1,来自test1 GROUP BY ID的ID)
请分享您想要显示的输出。可能这会对您有所帮助。