Нахождение наибольшего COUNT группы для отдельного запроса GROUP BY в Hive - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть таблица транзакций клиентов, где индивидуальный_идентификатор появляется один раз для каждой отдельной транзакции. Существует столбец категории с именем Name_des c, который я хотел бы сгруппировать по отдельным лицам и найти наиболее распространенную категорию name_des c для отдельных лиц.

Предположим, что данные похожи на

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

Я хочу вывод ниже

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

Я попытался выполнить запрос ниже и получил Ошибка при компиляции оператора: СБОЙ: ParseException строка 4:19 не может распознать ввод рядом с 'select '' max '' ('в спецификации выражения ошибка

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 )

Буду признателен за любые предложения или помощь в отношении запроса. Если есть эффективный способ выполнить эту работу. Дайте мне знать .

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Этот следующий скрипт написан и протестирован для MS SQL. Но так как HIVE также поддерживает тот же подзапрос Row_Number () и ans, этот следующий запрос должен помочь вам получить требуемый результат-

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 
0 голосов
/ 07 апреля 2020

Вам нужен подзапрос в 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...