【问题标题】:Calculating the Count of every pair product for every Order Divided by the number of every product and insert the result in correlation table计算每个订单的每对产品的计数除以每个产品的数量并将结果插入相关表中
【发布时间】:2017-11-15 12:43:23
【问题描述】:

大家好,我有一个销售历史数据集,我想创建一个查询,通过计算具有每对产品的订单数量,然后将该数字除以所有产品的数量来计算产品之间的相关性具有这一对的订单,例如 Ex (如果我想计算产品“A”和产品“B”之间的相关性,那么我将计算具有相同顺序的“A”和“B”的所有订单,然后除以此计数仅包含产品“A”的订单[如果我想获得“B”和“A”之间的相关性,这将有所不同])。 我想将此结果存储在相关表中,如流动图像中所示

这是我数据中 300 行的样本

structure(list(ï..OrderId = c(137413L, 137413L, 137413L, 137413L, 
137413L, 137413L, 137413L, 137413L, 137413L, 137413L, 137413L, 
137413L, 136729L, 136729L, 136729L, 136729L, 136729L, 136729L, 
136729L, 136729L, 136729L, 136729L, 136729L, 136729L, 136729L, 
137260L, 137260L, 137260L, 137260L, 137260L, 137260L, 137260L, 
137260L, 137260L, 137260L, 137429L, 137429L, 137429L, 137429L, 
137429L, 137429L, 137429L, 137429L, 137429L, 137902L, 137902L, 
137902L, 137902L, 137902L, 137902L, 137902L, 137974L, 137974L, 
138837L, 138837L, 138837L, 138837L, 138837L, 138837L, 139424L, 
139424L, 139424L, 139424L, 139424L, 139424L, 139424L, 139424L, 
139424L, 139642L, 139642L, 139642L, 139642L, 139642L, 139642L, 
139642L, 140676L, 140676L, 140676L, 140676L, 140676L, 140676L, 
140938L, 140938L, 140938L, 140938L, 140938L, 140938L, 140938L, 
140938L, 140938L, 140938L, 141302L, 141302L, 141302L, 141302L, 
141302L, 141302L, 137302L, 137302L, 137302L, 137302L, 138297L, 
138297L, 138297L, 138297L, 138297L, 138297L, 138297L, 138297L, 
138297L, 138297L, 138297L, 138297L, 138297L, 134444L, 134444L, 
134444L, 141134L, 141134L, 141134L, 141134L, 134468L, 134468L, 
131965L, 131965L, 131965L, 131965L, 131965L, 131965L, 131965L, 
131965L, 131965L, 135722L, 135722L, 135722L, 135722L, 135722L, 
135722L, 135722L, 135722L, 135722L, 135722L, 135722L, 135722L, 
135722L, 135722L, 139444L, 139444L, 139444L, 139444L, 139444L, 
139444L, 131866L, 131866L, 131866L, 131866L, 131866L, 131866L, 
131866L, 136078L, 136078L, 136078L, 136078L, 136078L, 136078L, 
136078L, 136078L, 136078L, 136078L, 136078L, 136078L, 136078L, 
137419L, 137419L, 137419L, 137419L, 137419L, 137419L, 137419L, 
137419L, 137419L, 137419L, 137419L, 137419L, 139214L, 139214L, 
139214L, 139214L, 139214L, 139214L, 131997L, 131997L, 131997L, 
131997L, 139482L, 139482L, 139482L, 139482L, 139482L, 139482L, 
139482L, 136066L, 136066L, 136066L, 136066L, 136066L, 136066L, 
136066L, 136610L, 136610L, 136610L, 136610L, 136610L, 137352L, 
137352L, 137352L, 137352L, 137352L, 137352L, 137352L, 137352L, 
133358L, 133358L, 133358L, 134522L, 134522L, 134522L, 134522L, 
134522L, 134522L, 134522L, 134522L, 131481L, 131481L, 131481L, 
131918L, 131918L, 131918L, 131918L, 135758L, 135758L, 135758L, 
135758L, 135678L, 135678L, 135678L, 135678L, 135678L, 135678L, 
135678L, 135678L, 135678L, 131986L, 131986L, 131986L, 131986L, 
131986L, 131986L, 131986L, 139468L, 139468L, 139468L, 139468L, 
139468L, 139468L, 139468L, 139468L, 139468L, 139468L, 139533L, 
139533L, 139533L, 139533L, 139533L, 139533L, 139533L, 139533L, 
139533L, 131950L, 137540L, 137540L, 137540L, 137540L, 137540L, 
137540L, 137540L, 138021L, 138021L, 138021L, 138021L, 138021L, 
138021L, 138021L, 138021L, 138021L, 134490L, 134490L, 134490L, 
134490L, 134490L), Items = structure(c(29L, 27L, 79L, 35L, 50L, 
77L, 32L, 80L, 24L, 60L, 20L, 44L, 46L, 47L, 27L, 68L, 14L, 35L, 
22L, 77L, 15L, 73L, 80L, 60L, 42L, 29L, 27L, 68L, 51L, 10L, 35L, 
22L, 73L, 62L, 60L, 27L, 51L, 10L, 37L, 35L, 22L, 62L, 80L, 60L, 
47L, 68L, 51L, 10L, 22L, 77L, 73L, 51L, 10L, 18L, 47L, 73L, 24L, 
60L, 20L, 18L, 29L, 47L, 17L, 35L, 77L, 11L, 73L, 78L, 46L, 18L, 
29L, 9L, 17L, 35L, 73L, 46L, 18L, 9L, 17L, 35L, 73L, 18L, 29L, 
27L, 22L, 50L, 19L, 73L, 13L, 1L, 7L, 46L, 8L, 80L, 24L, 60L, 
61L, 48L, 64L, 10L, 6L, 29L, 47L, 27L, 28L, 10L, 22L, 15L, 73L, 
62L, 24L, 60L, 20L, 58L, 66L, 67L, 43L, 38L, 36L, 74L, 70L, 74L, 
37L, 74L, 37L, 22L, 77L, 34L, 15L, 73L, 62L, 67L, 46L, 53L, 63L, 
57L, 74L, 48L, 27L, 17L, 14L, 15L, 73L, 12L, 67L, 43L, 18L, 29L, 
14L, 35L, 32L, 73L, 46L, 18L, 52L, 19L, 62L, 71L, 23L, 14L, 35L, 
34L, 19L, 73L, 13L, 43L, 39L, 24L, 75L, 20L, 3L, 41L, 29L, 27L, 
68L, 64L, 14L, 35L, 11L, 19L, 15L, 73L, 43L, 45L, 65L, 55L, 67L, 
61L, 58L, 40L, 57L, 74L, 31L, 73L, 69L, 65L, 30L, 73L, 56L, 49L, 
61L, 74L, 19L, 72L, 13L, 43L, 26L, 41L, 46L, 27L, 68L, 60L, 41L, 
74L, 27L, 37L, 14L, 73L, 43L, 60L, 41L, 74L, 32L, 67L, 4L, 29L, 
59L, 21L, 25L, 76L, 73L, 43L, 57L, 74L, 62L, 74L, 54L, 33L, 2L, 
15L, 73L, 62L, 80L, 59L, 21L, 25L, 27L, 14L, 15L, 73L, 43L, 80L, 
57L, 31L, 32L, 19L, 15L, 73L, 72L, 46L, 16L, 18L, 29L, 5L, 14L, 
35L, 22L, 73L, 61L, 46L, 18L, 29L, 5L, 14L, 35L, 22L, 73L, 61L, 
74L, 46L, 18L, 29L, 27L, 73L, 62L, 43L, 68L, 65L, 64L, 10L, 37L, 
17L, 11L, 61L, 70L, 59L, 21L, 25L, 76L, 14L), .Label = c(" Green Beans", 
"Apricot", "Arugula", "Arugula old", "Autumn Royal Grape", "Avocado", 
"Baladi Cabbage", "Baladi Garlic", "Banati Grape", "Barshomi Figs", 
"Black Eggplant", "Broccoli", "Cantaloupe", "Capsicum", "Carrot", 
"Cauliflower", "Chili Pepper", "Classic Eggplant", "Cooking Potato", 
"Coriander", "Coriander old", "Cucumber", "Deluxe Dried Dates", 
"Dill", "Dill old", "Dried Dates", "Flame Grape", "Fons Mango", 
"frying Potato", "Gala Apple", "Golden Apple", "Golden Onion", 
"Granny Apple", "Grape Leaves", "Green pepper", "Guava", "Hot Pepper", 
"Imported Peach", "Japanese Plum", "Lebanese Apple", "Local Apple", 
"Local Celery ", "Local Cucumber", "Local Eggplant", "Local Hot Pepper", 
"Local Lemon", "Local Pear", "Melon", "Mint", "Molokhia", "Momtaza Owais Mango", 
"Morket Tangerine", "Mushroom (200G) old", "Nectarine Peach", 
"Nems Watermelon (KG)", "Okra", "Orange For Juice", "Owais Mango", 
"Parsle old", "Parsley", "Red Globe Grape", "Red Onion", "Red Radish old", 
"Sadeeka Mango", "Sokkary Mango", "Strawberry", "Sugary Peach", 
"Superior Grape", "Sweet Potato", "Syrian plum", "Tamr hendi", 
"Taro", "Tomato", "Watermelon ( per KG)", "White Cabbage", "White Cabbage Old", 
"White Eggplant ", "Zaghlol Dates", "Zebdaya Mango", "Zucchini"
), class = "factor")), .Names = c("ï..OrderId", "Items"), class = "data.frame", row.names = c(NA, 
-300L))

【问题讨论】:

  • 你能提供dput:dput(data)的数据并粘贴到这里吗?
  • 将表格和数据发布为文本READ THIS 以了解原因
  • r 是否与 sql 查询相关?
  • 第一个单元格 Mango vs Mango 也应该是 1?
  • 检查这个。足以计算您的相关性rextester.com/NRQR82162 ...您知道如何进行 PIVOT 吗?

标签: sql-server r tsql


【解决方案1】:
  1. 计算每个产品的总订单数
  2. 将每个产品与其他产品配对
  3. 将订单与订单配对以查找哪些订单同时拥有这两种产品
  4. 一起拥有COUNT(A&B)COUNT(A)

SQL DEMO

WITH products as (
    SELECT [OtherLangDescription], COUNT(*) as orders_total
    FROM Orders 
    GROUP BY [OtherLangDescription]
), correlation as (
    SELECT p1.[OtherLangDescription] as p1,
           p1.orders_total as total1,
           p2.[OtherLangDescription] as p2,
           p2.orders_total as total2    
    FROM products p1
    CROSS JOIN products p2
), dual_products as (
    SELECT p1, p2, COUNT (o1.OrderID) as pair_orders_total
    FROM correlation c
    JOIN orders o1
      ON c.p1 = o1.[OtherLangDescription]
    JOIN orders o2
      ON c.p2 = o2.[OtherLangDescription]
     AND o1.orderID = o2.orderID
    GROUP BY p1, p2
)
SELECT c.*, 
       d.pair_orders_total,
       d.pair_orders_total * 1.0 / c.total1 as correlation   
FROM correlation c
JOIN dual_products d
  ON c.p1 = d.p1
 AND c.p2 = d.p2

如果将之前的结果保存为表 Result,则数据透视如下:

SQL DEMO

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT ',' + QUOTENAME(p2) 
            FROM Results c 
            GROUP BY p2
            ORDER BY p2  
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)')                             
        ,1,1,'')

set @query = 'SELECT p1, ' + @cols + ' from 
            (
                select p1
                    , p2
                    , correlation
                from Results
           ) x
            pivot 
            (
                 max(correlation)
                for p2 in (' + @cols + ')
            ) p 
            ORDER BY p1'

execute(@query);

输出

【讨论】:

  • 我用相关计算更新查询(据我了解)。 4000个订单有什么问题?
  • 难以置信!它的工作非常感谢,但我有一个重复每次执行的结果的问题,所以我可以解决这个问题吗?
  • 抱歉不明白你的意思
  • 我想对每天都在变化的数据使用这个查询,以便我想每天执行这个查询,但是在我的数据中,当我这样做时,它的总值每次执行都会增加,因为它将现有值添加到新值中。
  • TRUNCATE 桌子?我没有看到问题。
猜你喜欢
  • 2018-10-10
  • 2023-01-22
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
相关资源
最近更新 更多