计算SQL中唯一的列值组合后面的行数

时间:2017-11-10 13:08:41

标签: sql hive apache-zeppelin

我正在研究Apache Zeppelin。 我有下表:

|address | metric1 | metric2 | metric3|
|--------|---------|---------|--------|
|v       |        1|       1 |     200|
|w       |        1|       0 |     200|
|x       |        0|       1 |     200|
|y       |        0|       1 |     200|
|z       |        1|       0 |       1|

我想创建一个查询,显示指标值的所有可能组合,以及每个组合结束的地址数量。

像这样:

| metric1 | metric2 | metric3| count|
|---------|---------|--------|------|
|        1|       1 |     200|     1|
|        1|       0 |     200|     1|
|        0|       1 |     200|     2|
|        1|       0 |       1|     1|

我尝试了以下查询:

select metric1, metric2, metric3, count(*) as cnt 
from
(select distinct metric1, metric2, metric3 from table) as t;

但会导致此错误: org.apache.hive.service.cli.HiveSQLException:编译语句时出错:SemanticException [错误10025]:表达式不在GROUP BY键'metric1'

怎么了?

1 个答案:

答案 0 :(得分:0)

您只需要GROUP BY

select metric1, metric2, metric3, count(*) as cnt 
from t
group by metric1, metric2, metric3;

不需要子查询。