Улей SQL. Найти наиболее популярные значения в нескольких столбцах - PullRequest
0 голосов
/ 29 июня 2018

У меня есть следующие данные:

name device operating browser
 A     mob      l       c
 A     mob      l       b
 A     mob      l       b
 A     web      w       b
 B     web      w       c
 B     web      w       c
 B     mob      w       c
 B     web      l       b

И я хочу найти наиболее распространенные значения для каждого имени в каждом столбце, поэтому результат будет выглядеть следующим образом:

name device operating browser
 A     mob      l       b
 B     web      w       c

Как мне этого добиться? Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Для Hive 0.11+ вы можете использовать оконную функцию, например rank:

select name, device, operating, browser
from (
  select *, rank() over (partition by name order by cnt desc) as rnk
  from (
    select name, device, operating, browser, count(*) as cnt
    from yourtable
    group by name, device, operating, browser
  ) t
) t
where rnk = 1

Шаг за шагом:

  1. количество вхождений одинаковых значений строк
  2. ранжируйте их по количеству с наибольшим для каждого имени сверху
  3. фильтровать только те, которые имеют наибольшее количество

Примечание: если в определенном имени есть связь, он возвращает все строки с одинаковым номером для них.

0 голосов
/ 29 июня 2018

Это может помочь. Но, пожалуйста, обратите внимание, подзапрос не очень хорош для использования.

SELECT
a.name,
(SELECT b.device FROM YOUR_TABLE_NAME b WHERE b.name = a.name GROUP BY device ORDER BY COUNT(b.device) DESC LIMIT 1) AS device,
(SELECT c.operating FROM YOUR_TABLE_NAME c WHERE c.name = a.name GROUP BY operating ORDER BY COUNT(c.operating) DESC LIMIT 1) AS operating,
(SELECT d.browser FROM YOUR_TABLE_NAME d WHERE d.name = a.name GROUP BY browser ORDER BY COUNT(d.browser) DESC LIMIT 1) AS browser
FROM YOUR_TABLE_NAME AS a
GROUP BY a.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...