Как мне в sql вывести самые популярные браузеры в регионах?

Есть такая таблица:

region      browser
"Adygea"    "Chrome"
"Adygea"    "Firefox"
"Adygea"    "Firefox"
"Adygea"    "Firefox"
"Adygea"    "Firefox"
"Adygea"    "Firefox"
"Adygea"    "Firefox"
"Adygea"    "Firefox"
"Adygea"    "Firefox"
"Adygea"    "Firefox"
"Adygea"    "Firefox"
"Adygea"    "Opera"
"Adygea"    "Opera"
"Adygea"    "Safari"
"Adygea"    "Safari"
"Adygea"    "Safari"
"Adygea"    "Safari"
"Altai"     "Chrome"
"Altai"     "Chrome"
"Altai"     "Chrome"
"Altai"     "Chrome"
"Altai"     "Firefox"
"Altai"     "Firefox"
"Altai"     "Firefox"
"Altai"     "Firefox"
"Altai"     "Firefox"
"Altai"     "Opera"
"Altai"     "Opera"
"Altai"     "Safari"

Как мне в этой таблице вывести самые популярные браузеры в регионах?


Ответы (1 шт):

Автор решения: Dmitry Ivanov

Чтобы получить список самых популярных браузеров необходимо ответить на два вопроса, нужен список уникальных регионов и рейтинг браузеров в этих регионах, для этого необходимо два предварительных подзапроса, которые можно выполнить в CTE или в виде связанных подзапросов с LATERAL LIMIT последний вариант мне кажется более интересным:

SELECT rat.region, rat.browser, rat.rating FROM 
  (SELECT DISTINCT region FROM tbrowser) reg 
JOIN 
  LATERAL(SELECT region, browser, COUNT(*) rating FROM tbrowser 
  GROUP BY region, browser 
  HAVING region = reg.region ORDER BY region, rating DESC LIMIT 1) rat 
  ON reg.region = rat.region;
→ Ссылка