获取没有连接的非聚合列值 MySQL
Get non-aggregated column values without joins MySQL
我正在使用 mysql 8.0,而 table 我有很多行,因此 link 的解决方案需要很长时间才能 运行。
Table 示例:
ID
Name
Value
Category
1
a
5
alpha
2
b
7
beta
3
c
8
alpha
4
d
10
beta
- 我想按类别分组,然后select每个类别中的最大值
- 如果最大值发生冲突,我想获得最小的 ID(在我的情况下它将始终是唯一的)
输出table:
ID
Name
Value
Category
3
c
8
alpha
4
d
10
beta
ID 和类别列已编入索引,我需要此查询速度快。
- I would like to group it by
category
and then select the max value
in each category
- If the max values collide, I'd like to get the
smallest ID
(it will always be unique in my case)
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Category ORDER BY Value DESC, Id ASC) rn
FROM src_table
)
SELECT *
FROM cte
WHERE rn = 1
我正在使用 mysql 8.0,而 table 我有很多行,因此 link 的解决方案需要很长时间才能 运行。
Table 示例:
ID | Name | Value | Category |
---|---|---|---|
1 | a | 5 | alpha |
2 | b | 7 | beta |
3 | c | 8 | alpha |
4 | d | 10 | beta |
- 我想按类别分组,然后select每个类别中的最大值
- 如果最大值发生冲突,我想获得最小的 ID(在我的情况下它将始终是唯一的)
输出table:
ID | Name | Value | Category |
---|---|---|---|
3 | c | 8 | alpha |
4 | d | 10 | beta |
ID 和类别列已编入索引,我需要此查询速度快。
- I would like to group it by
category
and then select themax value
in each category- If the max values collide, I'd like to get the
smallest ID
(it will always be unique in my case)
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Category ORDER BY Value DESC, Id ASC) rn
FROM src_table
)
SELECT *
FROM cte
WHERE rn = 1