【问题标题】:How to grouby data in one column and distribute it in another column in HiveSQL?如何在 Hive SQL 中对一列中的数据进行分组并将其分布在另一列中?
【发布时间】: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 """

我怎样才能得到想要的输出?

【问题讨论】:

    标签: sql apache-spark-sql hiveql


    【解决方案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() 认为是第一行的内容确实是结果集中的第一行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 2021-04-29
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多