簡體   English   中英

SQL查詢以查找購物車中的所有組合及其出現

[英]SQL query to find all combinations in a shopping cart and their occurrence

我有一個包含兩列的表,即[USER]和[ITEM]。 每個項目都不會出現多次。

該表的示例可能是:

[USER]  [ITEM]
A        001
A        002
B        002
B        001
B        003
C        001

我想提取使用SQL購買過的所有項目序列。 在這種情況下:

[SEQUENCE]    [OCCURRENCES]    [LENGTH SEQUENCE]
001            3                 1
002            2                 1
003            1                 1
001-002        2                 2
001-002-003    1                 3

我相信將數據排序到表中的最佳方法是:

[SEQUENCE]    [ITEM]    [OCCURENCES]   [LENGTH SEQUENCE]
1             001        3              1
2             002        2              1
3             003        1              1
4             001        2              2
4             002        2              2
5             001        1              3
5             002        1              3
5             003        1              3

我發現這篇文章“ SQL查詢最流行的組合 ”,但它僅提取2個元素的組合。

您對如何獲得這種輸出有任何想法嗎? 謝謝!

要進行這種頻率分析,您需要一種方法來創建每次交易中購買的產品的所有組合。 為此,遞歸SQL是必經之路。

從購買表開始:

create table purchases (id varchar(6), product varchar(6));
insert into purchases 
values ('A','001')
      ,('A','002')
      ,('B','002')
      ,('B','001')
      ,('B','003')
      ,('C','001');

我們使用以下遞歸查詢來生成每個交易的所有購買組合,每個組合最多限制5個項目(您可以根據需要更改該限制),然后按照遞歸公用表表達式對查詢中生成的組合執行頻率分析:

with recur(id, length, combo, lastitem) as (
  -- Anchor Query
  select p.id, 1, cast(product as varchar(max)), product from purchases p

  union all -- Recursive Part
  select r.id, length+1, combo+','+product, product
    from recur r
    join purchases p
      on p.id = r.id
     and p.product > r.lastitem
   where r.length < 5
)
-- Output query
select length, combo, count(*) frequency
  from recur
 group by length, combo
 order by frequency desc
     , length desc
     , combo;

根據給定的數據得出以下結果:

length | combo       | frequency
-----: | :---------- | --------:
     1 | 001         |         3
     2 | 001,002     |         2
     1 | 002         |         2
     3 | 001,002,003 |         1
     2 | 001,003     |         1
     2 | 002,003     |         1
     1 | 003         |         1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM