【问题标题】:Finding the highest COUNT of a group per individual GROUP BY query in Hive在 Hive 中为每个单独的 GROUP BY 查询查找组的最高 COUNT
【发布时间】:2020-04-07 20:23:32
【问题描述】:

我有一个客户交易表,其中每个不同的交易都会出现一个 individual_id。 有一个名为 Name_desc 的类别列,我想按个人分组并找到每个人最常见的 name_desc 类别。

假设数据如下

Id          Name_desc
----        ------
1           a
2           c
1           b
2           c
1           b

我想要下面的输出

Id        Name_desc( most occuring category)
------    ------
1          b
2          c

我尝试了以下查询并得到了一个 编译语句时出错:FAILED: ParseException line 4:19 cannot identify input near 'select' 'max' '(' in expression specification 错误

select name_desc, count(*) as count_e
from db.cust_scan
group by id, name_desc
having count(*)= ( select max(count_e),id
from
(
select id, name_desc, count(*) as count_e
 from 
  db.cust_scan
        where 
        base_div_nbr =1 
        and 
        country_code ='US' 
        and
         retail_channel_code=1 
         and visit_date between '2019-01-01' and '2019-12-31'
         GROUP  by 
         individual_id, tt_id_desc
         order by individual_id, count_e desc
         ) as t 
         group by individual_id )

如果有任何关于查询的建议或帮助,我将不胜感激。如果有一种有效的方法来完成这项工作。告诉我。

【问题讨论】:

    标签: sql hive hiveql


    【解决方案1】:

    以下脚本是为 MSSQL 编写和测试的。但是由于 HIVE 也支持相同的 Row_Number() 和子查询,因此以下查询应该可以帮助您获得所需的输出-

    SELECT A.Id, A.Name_desc 
    FROM
    (
        SELECT Id,Name_desc,
        row_number() over (partition by id order by COUNT(*) desc) AS RN
        FROM your_table
        GROUP BY Id,Name_desc
    ) A
    WHERE RN = 1 
    

    【讨论】:

    • 。 .这是标准 SQL,应该适用于任何数据库(尽管我建议使用 as 作为列别名)。
    【解决方案2】:

    你需要 Hive 中的子查询:

    SELECT s.Id, s.Name_desc 
    FROM
    (
    select s.*, row_number() over (partition by s.id order by s.cnt desc) rn
    from
    (
        SELECT Id, Name_desc, COUNT(*) cnt
        FROM your_table
        GROUP BY Id, Name_desc
    ) s
    ) s
    WHERE rn= 1;
    

    【讨论】:

      猜你喜欢
      • 2021-12-19
      • 2015-01-22
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多