根据列的最大值选择相同的行,并在max equals时仅选择一行

时间:2017-09-15 12:41:43

标签: 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

我想要基于'MX'最大值的唯一名称,当两个相同名称的'MX'相等时,我需要其中一个,如下图所示:

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

这是我的疑问:

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

您推荐哪些方法?

1 个答案:

答案 0 :(得分:0)

为了避免两个值,其中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