对于100个或更多产品使用Case When Statement的最佳方法是什么

时间:2015-08-31 04:57:39

标签: sql oracle

这是我的表“卖家”

+------------+---------+----------+
| Seller_ID  | Product |  Units   |
+------------+---------+----------+
| Seller_123 |   A1    |   10     |
| Seller_123 |   B2    |   20     |
| Seller_123 |   C3    |   70     |
+------------+---------+----------+

从这里你可以看到这个“Seller_123”主要产品组是C3,因为他的单位主要集中在C3和70个单位。这是我想要实现的目标

+------------+-------------+
| Seller_ID  | Main_Product| 
+------------+-------------+
| Seller_123 |      C3     |  
+------------+-------------+

这是我当前的SQL查询

WITH TEMP
AS (
    SELECT Seller_ID
        ,SUM(CASE 
                WHEN Product = 'A1'
                    THEN Units
                END) AS A1_Units
        ,SUM(CASE 
                WHEN Product = 'B2'
                    THEN Units
                END) AS B2_Units
        ,SUM(CASE 
                WHEN Product = 'C3'
                    THEN Units
                END) AS C3_Units
    FROM sellers
    GROUP BY Seller_ID

    )
SELECT Seller_ID
    ,CASE 
        WHEN A1_Units > B2_Units
            AND A1_Units > C3_Units
            THEN A1
        WHEN B2_Units > A1_Units
            AND B2_Units > C3_Units
            THEN B2
        WHEN C3_Units > A1_Units
            AND C3_Units > B2_Units
            THEN C3
        END AS Main_Product
FROM TEMP

这样做的更好方法是什么?如果我有100件产品怎么办?在那种情况下我不能做什么?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

试试这个

    SELECT  S1.SELLER_ID, S1.PRODUCT AS MAIN_PRODUCT 
    FROM SELLER S1,
    (SELECT SELLER_ID, MAX(UNITS) AS MAX_UNIT FROM SELLER
    GROUP BY SELLER_ID) S2
    WHERE S1.SELLER_ID = S2.SELLER_ID
    AND S1.UNITS=S2.MAX_UNIT

表格如下所示。

    select * from SELLER;

    Seller_ID   Product Units
    Seller_123   A1     10
    Seller_123   B2     20
    Seller_123   C3     70
    Seller_456   D1     10
    Seller_456   E2     20

运行给定的select语句后,您将获得如下所示的数据

    SELECT  S1.SELLER_ID, S1.PRODUCT AS MAIN_PRODUCT 
    FROM SELLER S1,
    (SELECT SELLER_ID, MAX(UNITS) AS MAX_UNIT FROM SELLER
    GROUP BY SELLER_ID) S2
    WHERE S1.SELLER_ID = S2.SELLER_ID
    AND S1.UNITS=S2.MAX_UNIT


    SELLER_ID   MAIN_PRODUCT
    Seller_456   E2
    Seller_123   C3

答案 1 :(得分:2)

首先计算每种产品的所有销售额,然后查看哪一种是最大值。然后加入两个。

请注意,如果两个产品都是平局,则两者都会出现。

你没有说是想要所有Seller_ID的结果,还是只想要一个。{ 这适用于所有卖家。

WITH Sales as (
    SELECT 
        Seller_ID, Product, SUM(Units) AS Total        
    FROM 
        sellers
    GROUP BY 
        Seller_ID, Product
), 
Focus as  (
    SELECT Seller_ID, MAX(Total) Total
    FROM Sales
    GROUP BY Seller_ID
)   
SELECT *
FROM Sales
Inner Join Focus 
    ON  Sales.Total = Focus.Total
    and Sales.Seller_ID = Focus.Seller_ID