我有以下数据:
yr char cnt
1 a 27
1 g 20
3 b 50
3 z 70
我喜欢获得年份,只有cnt字段的最大数量。即,
yr char count
1 a 27
3 z 70
我尝试使用如下的SQL:
SELECT yr, char, max(count(cnt)) as count
FROM view
GROUP BY yr,char
但是它导致了一个错误,说max不能与SparkSQL中的count一起使用。如何获得我想要的结果如上所示?
答案 0 :(得分:1)
这应该有效
sql("select a.yr, a.char, a.cnt from view a join (select yr, max(cnt) as cnt from view group by yr) b on a.yr = b.yr and b.cnt = a.cnt").show()
答案 1 :(得分:0)
这通常是使用row_number()
:
select yr, char, cnt
from (select yr, char, count(*) as cnt,
row_number() over (partition by yr order by count(*) desc) as seqnum
from view
group by yr, char
) yc
where seqnum = 1;
注意:如果是关系,则会返回其中任意一个。如果您想要所有这些内容,请使用rank()
或dense_rank()
。