SQL: Как посчитать различные групповые комбинации? - PullRequest
0 голосов
/ 27 сентября 2018

Сценарий - у меня есть список заказов, и каждый заказ может состоять из 1 части или нескольких частей для этого заказа.Я хочу иметь возможность вернуть комбинации деталей и сумму количества раз, когда каждая комбинация деталей была заказана.Ex Item A, B, C, D был заказан 2 раза.A, B, C заказал 1 раз ... и т. Д.

Моя первоначальная мысль состоит в том, чтобы агрегировать позиции по заказу, а затем группировать (считать) эти данные.

enter image description here

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Поскольку 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
0 голосов
/ 27 сентября 2018

попробуйте, если вы используете mySQL.Иначе, измените group_concat с соответствующей функцией в ваших dbms.STRING_AGG (item, ',') для t-sql на сервере 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

другой запрос считает то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...