2017-09-15 133 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