【问题标题】:is there any way to programmatically set a flag if a value is present in presto/athena?如果 presto/athena 中存在值,有没有办法以编程方式设置标志?
【发布时间】:2021-06-16 15:26:55
【问题描述】:

我有两个表 A 和 B。A 有 X 和 Y 列。B 有 X 和 Z 列

在左边将 A 连接到 B 中,一些 Y 将具有值,而另一些则没有

如果 Y 有值,有什么方法可以给 A 添加一个标志?

相当于

选择(如果Y不为空则为1否则为0)作为标志,X,Y从A左连接B

【问题讨论】:

    标签: sql amazon-athena presto


    【解决方案1】:

    我不确定表中的标志是什么意思,但是,以下查询使用 coalesce 为您提供来自 JOIN 的值或否则不同的值

    WITH A AS
        (SELECT '0001' as X, '2020-01-01' as Y UNION ALL
          SELECT '0002', '2020-01-02' UNION ALL
          SELECT '0003', '2020-01-03'),
         B as 
         (SELECT '0001' as X, 'YES' as Z UNION ALL
          SELECT '0003', 'YES')
    select A.X, Y, coalesce(Z,'NO') as flag from A left join B on A.X = B.X
    

    输出是

    X Y flag
    0002 2020-01-02 NO
    0001 2020-01-01 YES
    0003 2020-01-03 YES

    【讨论】:

      【解决方案2】:

      我想你想要一个EXISTS 支票:

      select a.*,
             (case when exists (select 1 from b where b.x = a.x)
                   then 'yes' else 'no'
              end) as flag
      from a;
      

      我不推荐LEFT JOIN,因为如果有重复,那会成倍增加行数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-03
        • 2010-10-30
        • 1970-01-01
        • 2016-05-30
        • 1970-01-01
        • 2013-04-02
        • 2011-03-19
        • 1970-01-01
        相关资源
        最近更新 更多