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

Posted

技术标签:

【中文标题】从列中查找最大值并选择它们的行【英文标题】:Find the maximum value(s) from a column and selecting their rows 【发布时间】:2013-04-29 10:53:34 【问题描述】:

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

我的表结构:

 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

【问题讨论】:

请在这里展示你的挣扎。 (到目前为止你写的查询) 我无法为 WHERE group_id = (SELECT MAX(group_ID) 获取正确的语法 【参考方案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)

【讨论】:

谢谢你!我知道这很简单,但我无法正确使用语法。 您正在执行的查询是什么?错误信息是什么? 你的回答很完美!!我的意思是在你告诉我之前我无法理解语法。【参考方案2】:

您可以为此使用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

【讨论】:

感谢您的替代方法。

以上是关于从列中查找最大值并选择它们的行的主要内容,如果未能解决你的问题,请参考以下文章

从列中的最大 id 创建 HSQL 序列

从列中的字符串中提取每行的最大值

结合排序、选择进入和 where 语句以在 oracle sql 中查找最大值

熊猫:循环列表并从列中的列表中查找单词...使用列表中的找到的单词创建新列

SQL根据一列中的最大值从多列中选择不同的行

如何为HSQL中的每个组选择列中具有最大值的行?