Использование MAX () в GROUP BY с нечисловым столбцом - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть таблица, подобная следующей

UserId  | ActionType
--------------------
1       | Create
2       | Read
1       | Edit
2       | Create
3       | Read

Я хочу найти «самое высокое» действие, которое совершил пользователь, со следующей иерархией Create > Edit > Read.Выполнение нужного запроса должно вернуть

UserId | ActionType
-------------------
1      | Create
2      | Create
3      | Read

Есть ли способ использовать MAX() в HIVE для этого?Моя структура выглядит как следующий очень простой запрос, но я не уверен, как вычислить вышеуказанный столбец ActionType.

SELECT UserId, ??? FROM UserActions GROUP BY UserId;

Я думаю, что возможные решения - это операторы CASE в GROUP BY или преобразование значений в числовые значения, такие как (Read => 0, Edit => 1, Create => 2), а затем выполнение GROUP BY, но я надеюсь, что есть более элегантное решение.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Ниже будет запрос в улье.

select
t1.userId, t1.actionType, 
min(case when t1.actionType='Create' then 1 else 100
when t1.actionType='Edit' then 2 else 100
when t1.actionType='Read' then 3 else 100 end) as GroupBy
from mytable t1 group by t1.userId, t1.actionType
0 голосов
/ 22 февраля 2019

я не знаю, поддерживает ли hiveql подзапросы, но это идея, если это было на SQL:

SELECT
  a.UserId,
  a.ActionType
From
  a.UserActions
WHERE
  a.ActionType = (
    SELECT
      b.ActionType
    From
      (
        SELECT
          MAX(COUNT(*)),
          c.ActionType
        FROM
          UserActions as c
        WHERE
          c.UserId = a.UserId
        GROUP BY
          c.ActionType
      ) as b
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...