如何在 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 中对一列中的数据进行分组并将其分布在另一列中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在一列中对数据进行分组?

分组后只对一列进行排序

需要在 tablix 的列中对表达式进行分组

在C#中进行DataTable操作:根据列数据插入一些汇总行

有没有办法在 SQL 中对组执行操作?

在python中,我如何对一列中每个值与另一列中的值发生的次数(多少行)建立矩阵?