SQL:如何计算各种组组合?

时间:2018-09-27 14:35:39

标签: sql sql-server ssms

场景-我有一个订单列表,每个订单可以包含该订单的1个或多个部分。我希望能够返回零件组合以及每个零件组合已订购的次数的总和。订单A,B,C,D已订购2次。 A,B,C订购了1次...等。

我最初的想法是汇总每个订单的商品,然后对该数据进行分组(计数)。

enter image description here

2 个答案:

答案 0 :(得分:0)

如果使用的是mySQL,请尝试此操作。否则,在您的dbms中使用适当的功能更改group_concatSTRING_AGG (item, ',')用于sql server中的t-sql,string_agg(item, ',')用于postgresSQL 9 +

select items, count(*)
from
(select order, GROUP_CONCAT(item ORDER BY item ASC) as items
from table
group by order) as orders
group by items

该子查询将每个订单的所有项目连续放置。

select order, GROUP_CONCAT(item ORDER BY item ASC) as items
from table
group by order

另一个查询计算您想要的内容。

答案 1 :(得分:0)

由于STRING_AGG()仅在SQL Server 2017中可用,因此这是Kristjan Kica的答案版本,它使用STUFF()FOR XML代替。

SELECT
    items
    ,COUNT(*)
FROM
(
    SELECT
        yt.[order]
        ,items = STUFF((
                           SELECT ',' + t1.item 
                           FROM YourTable t1 
                           WHERE t1.[order] = yt.[order] 
                           FOR XML PATH('')
                       ) , 1, 1, '')
    FROM YourTable yt
    GROUP BY [order]
) orders
GROUP BY items