如何在 Hive SQL 中对一列中的数据进行分组并将其分布在另一列中?
Posted
技术标签:
【中文标题】如何在 Hive SQL 中对一列中的数据进行分组并将其分布在另一列中?【英文标题】:How to grouby data in one column and distribute it in another column in HiveSQL? 【发布时间】:2021-05-02 09:54:26 【问题描述】:我有以下数据:
CompanyID | Department | No of People | Country |
---|---|---|---|
45390 | HR | 100 | UK |
45390 | Service | 250 | UK |
98712 | Service | 300 | US |
39284 | Admin | 142 | Norway |
85932 | Admin | 260 | Germany |
我想知道有多少人属于不同国家的同一部门?
需要的输出
Department | No of People | Country |
---|---|---|
HR | 100 | UK |
Service | 250 | UK |
300 | US | |
Admin | 142 | Norway |
260 | Germany |
我能够获取数据,但该查询重复了部门。
""" select Department, Country,count(Department) from dataset
group by Country,Department
order by Department """
我怎样才能得到想要的输出?
【问题讨论】:
【参考方案1】:您生成的结果集并不是真正的关系结果集。为什么?因为行取决于“上一个”行中的内容。在关系数据库中,没有“前一个”行这样的东西。这类处理通常在应用层处理。
当然,SQL 可以为所欲为。你只需要小心:
select (case when 1 = row_number() over (partition by Department order by Country)
then Department
end) as Department,
Country, count(*) as num_people,
from dataset
group by Country,Department
order by Department, Country;
请注意,order by
需要匹配窗口函数子句,以确保 row_number()
认为是第一行的内容确实是结果集中的第一行。
【讨论】:
以上是关于如何在 Hive SQL 中对一列中的数据进行分组并将其分布在另一列中?的主要内容,如果未能解决你的问题,请参考以下文章