Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PostgreSQL中获取复杂的交叉销售详细信息_Postgresql - Fatal编程技术网

在PostgreSQL中获取复杂的交叉销售详细信息

在PostgreSQL中获取复杂的交叉销售详细信息,postgresql,Postgresql,我有一个问题,我需要了解交叉销售产品的收入详情。 例如,我想知道客户购买的与所选类别的所有类别组合,以及该客户在所选类别以外的其他类别上花费的金额 下面是一个示例查询,它将为我提供组合和收入,使用筛选子句,如果组合计数为2个类别,我可以获得包含和不包含所选类别的类别的收入,但是当组合中有2个以上类别时,我需要获得每个类别的成本信息,我如何获得它 数据库:PostgreSQL版本11 WITH filter_2 as ( SELECT DISTINCT

我有一个问题,我需要了解交叉销售产品的收入详情。 例如,我想知道客户购买的与所选类别的所有类别组合,以及该客户在所选类别以外的其他类别上花费的金额

下面是一个示例查询,它将为我提供组合和收入,使用筛选子句,如果组合计数为2个类别,我可以获得包含和不包含所选类别的类别的收入,但是当组合中有2个以上类别时,我需要获得每个类别的成本信息,我如何获得它

数据库:PostgreSQL版本11

WITH filter_2 as
    (
        SELECT DISTINCT 
                 o.order_number
               , o.client_email
               , COALESCE(category,'') AS category_name
               , SUM(revenue) as revenue
          FROM  
                     orders o
          INNER JOIN distinct_orders dos on dos.client_email=o.client_email
          LEFT JOIN items i ON i.order_id = o.order_id
          LEFT JOIN products p ON p.product_id = i.product_id 
      WHERE  o.state ='Done'
      GROUP BY o.order_number
    , o.client_email, COALESCE(category,'')
    )
    
    ,result_set_1 as
    (
        SELECT 
         f.order_number
        ,f.client_email
        ,string_agg(DISTINCT COALESCE(category,''), ' , ' ORDER BY COALESCE(category,'')) as cat_level_3_name
        ,COUNT(DISTINCT category) as prod_count
       
      ,SUM(revenue) revenue
        FROM filter_2 f
    GROUP BY f.order_number,f.client_email
    )
    SELECT 
    COUNT(DISTINCT order_number) as order_count,
    COUNT(DISTINCT client_email) as customer_count
    ,category
    ,SUM(revenue) as revenue
    FROM result_set_1 r
    WHERE category IS NOT NULL
    GROUP BY category
    ORDER BY order_count DESC
样本输入

Order_number   client_email     category  Revenue
"819214"    "olx@gmail.com"     "A Tea" 290.00
"819214"    "olx@gamil.com"     "B Tea" 10.00
"608759"    "lixxx@gmail.com"   "A Tea" 15.00
"608759"    "lixxx@yahoo.com"   "B Tea" 20.00
"608759"    "lixxx@gmail.com"   "C Tea" 400.00
"237070"    "news@gmail.com"    "A Tea" 60.0
"237070"    "news@gmail.com"    "B Tea" 10.0
"508759"    "chink@gmail.com"   "A Tea" 15.00
"508759"    "chink@gmail.com"   "B Tea" 25.00
"508759"    "chink@gmail.com"   "C Tea" 45.00
"578759"    "xxxx@gmail.com"    "A Tea" 15.00
"588759"    "xyyy@gmail.com"    "A Tea" 15.00
"598759"    "vtyy@gmail.com"    "A Tea" 15.00
预期产出

因此,如果我想知道客户购买的所有组合类别以及“一杯茶”


谁能帮我解决这个问题?有什么建议吗?有谁能帮我解决这个问题吗?有什么建议吗?
Combinations         Customer count    Combination count   Revenue Split UP
A Tea                 7                   3 ( Or 7)       A Tee = 45 or (425)
A Tea, B Tea          2                   2               A Tea = 350 B Tea = 20
A Tea, B Tea, C Tea   2                   2               A Tea= 30  B Tea=45   C Tea = 445