我有一张像
这样的表格+------+-------+-------------------------------------+
| id | col2 | col3 |
+------+-------+-------------------------------------+
| 1 | 1 | 10 |
| 2 | 1 | 20 |
| 3 | 1 | 15 |
| 4 | 2 | 10 |
| 5 | 2 | 20 |
| 6 | 2 | 15 |
| 7 | 2 | 30 |
+------+-------+-------------------------------------+
我想选择其中col3具有最大值且col2 = 2的Id。(在这种情况下为id 7,因为它具有最大值30,其中col2 = 2)。我尝试使用GROUP BY子句
SELECT id, MAX(col3) FROM table_name
WHERE col2 =2
GROUP BY id
但它给了我所有的ID,其中col2 = 2。如何实现所需的输出?
感谢。
答案 0 :(得分:3)
您可以使用ROW_NUMBER
:
CREATE TABLE temp(
ID INT,
Col2 INT,
Col3 INT
)
INSERT INTO temp VALUES
(1, 1, 10), (2, 1, 20), (3, 1, 15),
(4, 2, 10), (5, 2, 20), (6, 2, 15),
(7, 2, 30);
SELECT
ID, Col3
FROM(
SELECT *, rn = ROW_NUMBER() OVER(PARTITION BY col2 ORDER BY col3 DESC)
FROM table_name
)t
WHERE
rn = 1
AND col2 = 2
<强> RESULT 强>
ID Col3
----------- -----------
7 30
答案 1 :(得分:0)
一个简单的子查询将完成这项工作:
SELECT id
FROM table_name
WHERE col2 = 2
AND col3 = (SELECT MAX(col3) FROM table_name WHERE col2=2)
如果您有多个具有相同最大值的行,如果您不希望使用DISTINCT id
或像MAX(id)
或{{1}这样的聚合函数,则可以返回多个ID }。
这是使用TOP 1 id
的另一种方法:
GROUP BY
答案 2 :(得分:0)
您必须使用以下简单的SQL查询来满足您的要求。
SELECT TOP 1 ID
FROM table_name
Where col2 = 2
ORDER BY col3 DESC
您也可以使用ROW_NUMBER()
功能。这是获得相同结果的另一种方式。