计算不同列的最大值的问题
Problem with counting MAX value of distinct column
我在 Amazon Athena 中有一个名为 "levels" 的 table,其中包括名为 "user"、"levelstarted" 和 "levelcount" 的列。 table 看起来像这样:
+------+---------------+--------------+
| 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
在 Athena/Presto 中,您可以使用 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
我在 Amazon Athena 中有一个名为 "levels" 的 table,其中包括名为 "user"、"levelstarted" 和 "levelcount" 的列。 table 看起来像这样:
+------+---------------+--------------+
| 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
在 Athena/Presto 中,您可以使用 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