我收到以下错误,第 25:8 行:无法解析列 'flag1'
I am getting the following error , line 25:8: Column 'flag1' cannot be resolved
我在 presto 中编写了以下查询,它给出了错误:行 [=16=]:无法解析列 'flag1'。必须合并标志条件。我有 运行 一个关于 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
考虑将 WHERE flag1 = 'New'
更改为 WHERE date_diff ('day',fod,dt) <= 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
你为什么还要费心去定义标志?你可以只使用:
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;
备注:
- 使用 table 别名使查询更易于编写和阅读。
- 不需要子查询。
- 我更喜欢直接比较日期而不是使用
date_diff()
,但我在您的代码中留下了 date_diff()
。
COUNT()
在没有列的情况下工作。不需要统计一列非NULL
值的个数。只需使用 COUNT(*)
。或者,如果您愿意,COUNT(1)
.
我在 presto 中编写了以下查询,它给出了错误:行 [=16=]:无法解析列 'flag1'。必须合并标志条件。我有 运行 一个关于 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
考虑将 WHERE flag1 = 'New'
更改为 WHERE date_diff ('day',fod,dt) <= 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
你为什么还要费心去定义标志?你可以只使用:
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;
备注:
- 使用 table 别名使查询更易于编写和阅读。
- 不需要子查询。
- 我更喜欢直接比较日期而不是使用
date_diff()
,但我在您的代码中留下了date_diff()
。 COUNT()
在没有列的情况下工作。不需要统计一列非NULL
值的个数。只需使用COUNT(*)
。或者,如果您愿意,COUNT(1)
.