【问题标题】:I am getting the following error , line 25:8: Column 'flag1' cannot be resolved我收到以下错误,第 25:8 行:无法解析列 'flag1'
【发布时间】:2021-06-08 23:15:01
【问题描述】:

我在 presto 中编写了以下查询,它给出了错误:line 25:8: Column 'flag1' cannot be resolve。必须合并标志条件。我在 redshift 上运行了类似的查询,没有任何问题。

select dt,CASE WHEN date_diff ('day',fod,dt) <= 28 then 'New' ELSE 'Old'
                   END AS flag1,COUNT(us.user_id) AS users,SUM(views) AS o_views,SUM(orders) AS orderss
FROM
(
 (select dt,user_id,portfolio_views as views ,portfolio_orders as orders
FROM gold.user_daily_osv
 ) AS us
JOIN
(select user_id,CAST(first_order_ts as DATE) as fod
from gold.prism__user_master_bi
) as um
ON
us.user_id=um.user_id)
 WHERE flag1 = 'New'
group by 1,2
order by 1 desc

【问题讨论】:

    标签: sql presto


    【解决方案1】:

    考虑将WHERE flag1 = 'New' 更改为WHERE date_diff ('day',fod,dt) &lt;= 28

    SELECT
        dt,
        CASE 
            WHEN date_diff ('day',fod,dt) <= 28 then 'New' 
            ELSE 'Old' 
        END AS flag1,
        COUNT(us.user_id) AS users,
        SUM(views) AS o_views,
        SUM(orders) AS orderss 
    FROM ( 
        (
        select 
            dt,
            user_id,
            portfolio_views as views ,
            portfolio_orders as orders 
        FROM 
            gold.user_daily_osv 
        ) AS us 
        JOIN (
               select 
                   user_id,
                   CAST(first_order_ts as DATE) as fod 
               from gold.prism__user_master_bi 
        ) as um ON us.user_id=um.user_id
    ) 
    WHERE date_diff ('day',fod,dt) <= 28 
    group by 1,2 
    order by 1 desc
    

    【讨论】:

    • 此过滤器为“新”提供一个值。如果我将 WHERE date_diff ('day',fod,dt) = 28,它会给出“新”值和“旧”值。你能帮忙吗?
    【解决方案2】:

    您为什么还要费心定义标志?你可以使用:

    SELECT udo.dt, 'New' as flag1,
           COUNT(*) AS users,
           SUM(udo.portfolio_views) AS o_views,
           SUM(udo.portfolio_orders) AS orderss 
    FROM gold.user_daily_osv udo JOIN
         gold.prism__user_master_bi um
         ON us.user_id = um.user_id
    WHERE date_diff('day', CAST(um.first_order_ts as DATE), udo.dt) <= 28 
    GROUP BY 1
    ORDER BY 1 DESC;
    

    注意事项:

    • 使用表别名,以便查询更易于编写和阅读。
    • 不需要子查询。
    • 比起使用date_diff(),我更喜欢直接比较日期,但我在您的代码中留下了date_diff()
    • COUNT() 在没有列的情况下工作。无需计算列的非NULL 值的数量。只需使用COUNT(*)。或者,如果您愿意,COUNT(1)

    【讨论】:

      猜你喜欢
      • 2020-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 2021-12-03
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      相关资源
      最近更新 更多