mysql - 根据一列的最大值选择相同的行,当最大值等于时只选择其中一行

标签 mysql group-by max self-join

我有一个名为“demo”的表,其中包含以下数据:

Name    Group   MX
A        XY     1
B        YZ     1
B        XY     2
C        YZ     5
C        XY     3
D        YZ     2
E        YZ     1
E        XY     1

I want unique names based on 'MX' maximum value, when the 'MX' for two identical names are equal I need one of them as illustrated below:

Name    Group   MX
A        XY     1
B        XY     2
C        YZ     5
D        YZ     2
E        YZ     1   -- or this {E   XY   1}

This is my query:

SELECT demo.Name, demo.Group, demo.MX
    FROM ( 
        SELECT Name, MAX(MX) AS max_values 
        FROM demo
        GROUP BY Name
     ) demo2
INNER JOIN demo
ON demo.Name = demo2.Name
AND demo.MX = demo2.max_values

它工作得很好,但是当两个名字相同时,它显示如下:

Name    Group   MX
A        XY      1
B        XY      2
C        YZ      5
D        YZ      2
E        YZ      1 
E        XY      1

您推荐哪些方法?

最佳答案

为了避免 Name 和 MX 相等的两个值,您可以使用(假的)聚合函数并按例如分组:

SELECT demo.Name, min(demo.Group), demo.MX
    FROM ( 
        SELECT Name, MAX(MX) AS max_values 
        FROM demo
        GROUP BY Name
     ) demo2
INNER JOIN demo ON demo.Name = demo2.Name AND demo.MX = demo2.max_values
GROUP BY demo.Name, demo.MX

关于mysql - 根据一列的最大值选择相同的行,当最大值等于时只选择其中一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46239869/

相关文章:

mysql - 检查表是否存在于mysql中

MYSQL:如何在 'IS NULL' 子句中回退到 'WHERE'

mysql - 如何获取mysql中每组的最后一行

algorithm - 计算网络的最大流量

python - 如何在元组列表中查找用户定义的最小值和最大值

python - MySql FetchMany 内存问题

MySQL 在内存中存储索引(用于读取)

sql - MySQL 查询 - 使用分组时获取丢失的记录

sql - 按案例字段分组

javascript - 对象中的最高值(如果有更多最大值并且它们相同,则更多)