从列中查找最大值并选择它们的行

时间:2013-04-29 10:53:35

标签: mysql sql max

在查看其他示例之后,我仍然无法找到解决方案,这就是我要求帮助的原因。

我的表结构:

 V_id | name | group_id | other columns
 ----------------------
   1  |      |    1     
   2  |      |    1     
   3  |      |    2     
   4  |      |    3     
   5  |      |    3

我一直在努力构建查询,从group_id列中选择所有具有最大值的行。

因此输出应该是这样的:

V_id | name | group_id | other columns
----------------------
  4  |      |    3     
  5  |      |    3     

我认为可以通过选择group_id最高的所有记录来解决。


并且还需要查询以获取所有其他剩余的行 在这种情况下,应该是这样的:

V_id | name | group_id | other columns
----------------------
  1  |      |    1     
  2  |      |    1     
  3  |      |    2 

我认为可以通过选择group_id<的所有记录来完成。 MAX(GROUP_ID)

2 个答案:

答案 0 :(得分:1)

问题的第一部分,

SELECT  *
FROM    tableName
WHERE   group_id = (SELECT MAX(group_ID) FROM TableName)

,第二部分,

SELECT  *
FROM    tableName
WHERE   group_id < (SELECT MAX(group_ID) FROM TableName)

答案 1 :(得分:1)

您可以使用JOIN

SELECT a.* 
  FROM Table1 a
  JOIN (SELECT MAX(Group_ID) AS MAXID 
          FROM Table1) B
    ON a.Group_id = B.MaxID;

结果:

| V_ID |   NAME | GROUP_ID |
----------------------------
|    4 | (null) |        3 |
|    5 | (null) |        3 |

对于剩余的行,请使用LEFT JOIN,条件如下:

   SELECT a.* 
     FROM Table1 a
LEFT JOIN (SELECT MAX(Group_ID) AS MAXID 
             FROM Table1) B
       ON a.Group_id = B.MaxID
    WHERE B.MaxID IS NULL;

结果:

| V_ID |   NAME | GROUP_ID |
----------------------------
|    1 | (null) |        1 |
|    2 | (null) |        1 |
|    3 | (null) |        2 |

See this SQLFiddle