Sql Impala错误:AnalysisException:选择不是由聚合输出生成的列表表达式(GROUP by子句中缺少):
这是我的第一篇文章。希望我能说清楚:) 我尝试在impala上运行(使用色调)2版本中的下一个查询 第1版(按1分组):Sql Impala错误:AnalysisException:选择不是由聚合输出生成的列表表达式(GROUP by子句中缺少):,sql,group-by,hue,impala,Sql,Group By,Hue,Impala,这是我的第一篇文章。希望我能说清楚:) 我尝试在impala上运行(使用色调)2版本中的下一个查询 第1版(按1分组): SELECT payment_method, (CASE WHEN price <= 1000 AND country = 'israel' THEN (price+50+0.18*price)/count(Distinct payment_token)/100 WHEN price <= 1000 AND country
SELECT payment_method,
(CASE WHEN price <= 1000 AND country = 'israel' THEN (price+50+0.18*price)/count(Distinct payment_token)/100
WHEN price <= 1000 AND country <> 'israel' THEN (price+50)/count(Distinct payment_token)/100
WHEN price > 1000 AND country = 'israel' THEN (price+0.05*price+0.18*price)/100
ELSE (price+0.05*price)/count(Distinct payment_token)/100
END) as ASP
FROM traffic_db.traffic_parq
WHERE year = 2016 AND month = 1
Group by 1
Error 1: AnalysisException: select list expression not produced by aggregation output (missing from GROUP BY clause?): CASE WHEN price... (rest of case when statment)
SELECT payment_method,
(CASE WHEN price <= 1000 AND country = 'israel' THEN (price+50+0.18*price)/count(Distinct payment_token)/100
WHEN price <= 1000 AND country <> 'israel' THEN (price+50)/count(Distinct payment_token)/100
WHEN price > 1000 AND country = 'israel' THEN (price+0.05*price+0.18*price)/100
ELSE (price+0.05*price)/count(Distinct payment_token)/100
END) as ASP
FROM traffic_db.traffic_parq
WHERE year = 2016 AND month = 1
Group by 1,2
Error: AnalysisException: GROUP BY expression must not contain aggregate functions: 2
选择付款方式,
(当价格此查询出现问题时的情况:
SELECT payment_method,
(CASE when ftb = true THEN 'FTB' ELSE 'Repeat' end) as FTB_Repeat,
(CASE WHEN price <= 1000 AND country = 'israel'
THEN SUM(price+50+0.18*price)/count(Distinct pay ment_token)/100
WHEN price <= 1000 AND country <> 'israel'
THEN SUM(price+50)/count(Distinct payment_token)/100
WHEN price > 1000 AND country = 'israel'
THEN SUM(price+0.05*price+0.18*price)/100
ELSE SUM(price+0.05*price)/count(Distinct payment_token)/100
END) as ASP,
COUNT(*)
FROM traffic_db.traffic_parq
WHERE year = 2016 AND month = 1
Group by 1,2;
(注意:我不知道Impala是否允许组中的列别名由
)关键是添加额外的未聚合列
因此,这可能是您查询的目的。或者,您可能希望条件聚合:
SELECT payment_method,
(CASE when ftb = true THEN 'FTB' ELSE 'Repeat' end) as FTB_Repeat,
SUM(CASE WHEN price <= 1000 AND country = 'israel'
THEN (price+50+0.18*price)/count(Distinct payment_token)/100
WHEN price <= 1000 AND country <> 'israel'
THEN (price+50)/count(Distinct payment_token)/100
WHEN price > 1000 AND country = 'israel'
THEN (price+0.05*price+0.18*price)/100
ELSE (price+0.05*price)/count(Distinct payment_token)/100
END) as ASP,
COUNT(*)
FROM traffic_db.traffic_parq
WHERE year = 2016 AND month = 1
Group by 1, 2;
选择付款方式,
(当ftb=true时,则为'ftb'或'Repeat'结束)作为ftb_Repeat,
SUM(price时的情况)此查询的问题:
SELECT payment_method,
(CASE when ftb = true THEN 'FTB' ELSE 'Repeat' end) as FTB_Repeat,
(CASE WHEN price <= 1000 AND country = 'israel'
THEN SUM(price+50+0.18*price)/count(Distinct pay ment_token)/100
WHEN price <= 1000 AND country <> 'israel'
THEN SUM(price+50)/count(Distinct payment_token)/100
WHEN price > 1000 AND country = 'israel'
THEN SUM(price+0.05*price+0.18*price)/100
ELSE SUM(price+0.05*price)/count(Distinct payment_token)/100
END) as ASP,
COUNT(*)
FROM traffic_db.traffic_parq
WHERE year = 2016 AND month = 1
Group by 1,2;
(注意:我不知道Impala是否允许组中的列别名由
)关键是添加额外的未聚合列
因此,这可能是您查询的目的。或者,您可能希望条件聚合:
SELECT payment_method,
(CASE when ftb = true THEN 'FTB' ELSE 'Repeat' end) as FTB_Repeat,
SUM(CASE WHEN price <= 1000 AND country = 'israel'
THEN (price+50+0.18*price)/count(Distinct payment_token)/100
WHEN price <= 1000 AND country <> 'israel'
THEN (price+50)/count(Distinct payment_token)/100
WHEN price > 1000 AND country = 'israel'
THEN (price+0.05*price+0.18*price)/100
ELSE (price+0.05*price)/count(Distinct payment_token)/100
END) as ASP,
COUNT(*)
FROM traffic_db.traffic_parq
WHERE year = 2016 AND month = 1
Group by 1, 2;
选择付款方式,
(当ftb=true时,则为'ftb'或'Repeat'结束)作为ftb_Repeat,
SUM(price Hi时为CASE,感谢您的快速回答:)不幸的是,这不是问题所在。Impala允许使用别名(数字)进行聚合.我最初写的查询是个错误-这不是我试图运行的查询。我编辑了真实的查询query@shayms8…你不明白这个答案。试着重读一遍。嘿,戈登。我想我明白你的意思了…只是这不是问题:\n我试图运行你编写的查询,但没有成功。你检查了编辑I'v吗完成了吗?我只有两列-payment_method和calculated列。因此,我只需要在第一列上分组。不是吗?在您的帮助下,您的两个答案都不起作用了!@shayms8…您真的不明白。您无法使用第二个别名进行聚合,因为它包含聚合函数(例如count()
)。您需要使用条件聚合(如在我的第二个查询中)或者将表达式中未聚合的列分离出来。您缺少了一些简单的内容;不知何故,您将问题复杂化了。我确实明白了。我知道通过什么方法进行分组,并且我知道我不能通过聚合函数进行分组。我尝试了下一个查询:`SELECT payment\u method,SUM(价格高的情况下,感谢您的快速回答:)不幸的是,这不是问题所在。黑斑羚允许使用别名(数字)进行聚合.我最初写的查询是个错误-这不是我试图运行的查询。我编辑了真实的查询query@shayms8…你不明白这个答案。试着重读一遍。嘿,戈登。我想我明白你的意思了…只是这不是问题:\n我试图运行你编写的查询,但没有成功。你检查了编辑I'v吗完成了吗?我只有两列-payment_method和calculated列。因此,我只需要在第一列上分组。不是吗?在您的帮助下,您的两个答案都不起作用了!@shayms8…您真的不明白。您无法使用第二个别名进行聚合,因为它包含聚合函数(例如count()
)。您需要使用条件聚合(如在我的第二个查询中)或者将表达式中未聚合的列分离出来。您缺少一些简单的内容;不知何故,您将问题复杂化了。我确实明白了。我知道通过什么方法进行分组,并且我知道我不能通过聚合函数进行分组。我尝试了下一个查询:`SELECT payment\u method,SUM(price时为CASE)