从列中查找最大值并选择它们的行
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
【讨论】:
感谢您的替代方法。以上是关于从列中查找最大值并选择它们的行的主要内容,如果未能解决你的问题,请参考以下文章
结合排序、选择进入和 where 语句以在 oracle sql 中查找最大值