【问题标题】:'Tagging' a record using multiple criteria使用多个条件“标记”记录
【发布时间】:2020-06-18 13:21:02
【问题描述】:

我正在使用 Presto。我想使用不互斥的不同条件为一行分配多个“标签”。

例如,假设有一个有 4 列的表:

|  food      | color  | type        | on_sale |
|------------+--------+-------------+---------|
|  apple     | red    | fruit       | TRUE    |
|  banana    | yellow | fruit       | FALSE   |
|  cornbread | yellow | baked goods | TRUE    |
|  apple pie | brown  | baked goods | TRUE    |

我想用我定义的标签来标记每种食物,例如red foodred food on saleyellow baked goodsyellow food on_sale。在示例中,apple 匹配两个标签:red foodred food on sale

我不能使用CASE(如下所示),因为只有在我真正希望将其标记为两者时,我才会返回“红色食物”。

CASE 
   WHEN color = 'red' THEN 'red food'
   WHEN color = 'red' AND `on_sale` = TRUE THEN 'red food on sale'
   (and so on)

理想情况下,我想返回一个数组,该数组可以捕获超过 1 个“标签”或重复列,每个标签只有一行,但我不知道该怎么做。有什么想法吗?

提前致谢!

【问题讨论】:

    标签: sql arrays case presto


    【解决方案1】:

    您可以使用字符串连接:

    LTRIM(CASE WHEN color = 'red' THEN ' red food' ELSE '' END ||
          CASE WHEN `on_sale` = TRUE THEN ' on sale' ELSE '' END
          END)
    

    【讨论】:

    • 谢谢!我没有完全使用这个,但是这个方法解决了我的问题
    猜你喜欢
    • 1970-01-01
    • 2021-08-22
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多