【问题标题】:Selecting a value based on condition from other two columns根据其他两列的条件选择一个值
【发布时间】:2022-09-30 14:38:56
【问题描述】:

我有下表:

| beverage | country | units_a_sold | units_b_sold |
| -------- | ------- | ------------ | ------------ |
| fanta    | US      | 184          |          209 |
| fanta    | DE      | 0            |          400 |
| fanta    | UK      | 309          |          107 |
| pepsi    | US      | 0            |          890 |
| pepsi    | DE      | 0            |          345 |
| pepsi    | UK      | 0            |          193 |

我想了解每种饮料类型的最大销售量所在的国家/地区。优先考虑a。 如果没有以 a 出售的单位,我们从以 b 出售的最大单位中取国家。

因此,对于芬达,我们将拥有英国,而对于百事可乐,我们将拥有美国

我有这样的事情:

WITH temp AS (
    SELECT *
        , RANK() OVER (PARTITION BY app_id ORDER BY units_a_sold DESC) rnk_a
        , RANK() OVER (PARTITION BY app_id ORDER BY units_B_sold DESC) rnk_b
    FROM table
)

SELECT DISTINCT beverage
    , CASE 
        WHEN units_a_sold > 0 THEN (...)

FROM temp
WHERE rnk = 1;

有任何想法吗?

【问题讨论】:

    标签: mysql sql hive window-functions presto


    【解决方案1】:

    使用MAX() 窗口函数检查每个beverageFIRST_VALUE() 窗口函数的units_a_sold 中是否存在有效值以选择正确的country

    SELECT DISTINCT beverage,
           CASE 
             WHEN MAX(units_a_sold) OVER (PARTITION BY beverage) > 0 
               THEN FIRST_VALUE(country) OVER (PARTITION BY beverage ORDER BY units_a_sold DESC) 
             ELSE FIRST_VALUE(country) OVER (PARTITION BY beverage ORDER BY units_b_sold DESC)
           END country
    FROM temp;
    

    请参阅demo

    【讨论】:

      猜你喜欢
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 2022-12-09
      • 2018-09-24
      相关资源
      最近更新 更多