Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Impala错误:AnalysisException:选择不是由聚合输出生成的列表表达式(GROUP by子句中缺少):_Sql_Group By_Hue_Impala - Fatal编程技术网

Sql Impala错误:AnalysisException:选择不是由聚合输出生成的列表表达式(GROUP by子句中缺少):

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

这是我的第一篇文章。希望我能说清楚:)

我尝试在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 <> '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)