2017-09-15 84 views
0

我有一个名为“演示”用下面的数据表:基于列的最大值选择相同的行只有选择行之一,当最大等于

 
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 

你推荐什么方法呢?

+0

见:我为什么要为了什么,在我看来是提供MCVE一个非常简单的SQL查询?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-bea-a-极简单的SQL查询) – Strawberry

回答

0

为避免出现两个值,其中名称和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