Проблема с подсчетом значения MAX для отдельного столбца - PullRequest
0 голосов
/ 05 июля 2019

У меня в Amazon Athena есть таблица уровней, в которую входят столбцы «user», «levelstarted» и «levelcount».Таблица выглядит следующим образом: +------+---------------+--------------+ | user | levelstarted | startedcount | +------+---------------+--------------+ | A | 0050 | 2 | | A | 0051 | 1 | | A | 0052 | 3 | | B | 0030 | 1 | | B | 0031 | 2 | | B | 0032 | 5 | | C | 0010 | 6 | | C | 0011 | 3 | | C | 0012 | 3 | +------+---------------+--------------+

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

+------+----------------+----------------+ | user | highestlevel | | startedcount | | +------+----------------+----------------+ | A | 0052 | 3 | | B | 0032 | 5 | | C | 0012 | 3 | +------+----------------+----------------+

Поиск самого высокого начального уровня работает просто отлично:

SELECT 
 DISTINCT user as payer,
 MAX(levelstarted) as levelstarted
FROM "levels"
GROUP BY user, startedcount

Но когда я добавляю начальное количество, я получаюдубликат пользователей в результатах:

SELECT 
 DISTINCT user as payer,
 MAX(levelstarted) as levelstarted,
 startedcount
FROM "levels"
GROUP BY user, levelcount

1 Ответ

0 голосов
/ 05 июля 2019

В Афине / Престо вы можете использовать функцию max_by, чтобы найти значение, связанное с максимальным значением столбца:

SELECT
  user,
  MAX(levelstarted) AS highestlevel,
  MAX_BY(startedcount, levelstarted) AS startedcount
FROM (VALUES ('A', '0050', 2),
             ('A', '0051', 1),
             ('A', '0052', 3),
             ('B', '0030', 1),
             ('B', '0031', 2),
             ('B', '0032', 5),
             ('C', '0010', 6),
             ('C', '0011', 3),
             ('C', '0012', 3)
) AS v (user, levelstarted, startedcount)
GROUP BY user
ORDER BY user
...