获取没有连接的非聚合列值 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
  1. 我想按类别分组,然后select每个类别中的最大值
  2. 如果最大值发生冲突,我想获得最小的 ID(在我的情况下它将始终是唯一的)

输出table:

ID Name Value Category
3 c 8 alpha
4 d 10 beta

ID 和类别列已编入索引,我需要此查询速度快。

  1. I would like to group it by category and then select the max value in each category
  2. 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