SQL从其中一列中选择多列和MAX,只返回一行

时间:2013-03-31 09:41:59

标签: sql ms-access select max

我需要从表中选择多个列,以及其中一个列的最大值 结果必须只是最大值所在的一行。 这是我的表的简化版本(抱歉,不知道如何插入空格)

╔═════════╦══════════╦═══════════╗
║ CARMAKE ║ CARMODEL ║ CARWEIGHT ║
╠═════════╬══════════╬═══════════╣
║ A       ║ B        ║      1000 ║
║ C       ║ D        ║       900 ║
╚═════════╩══════════╩═══════════╝

期望的结果是

╔═════════╦══════════╦═══════════╗
║ CARMAKE ║ CARMODEL ║ CARWEIGHT ║
╠═════════╬══════════╬═══════════╣
║ A       ║ B        ║      1000 ║
╚═════════╩══════════╩═══════════╝

但是当我使用

SELECT carmake, carmodel, MAX(carweight)
FROM   car
GROUP  BY carmake, carmodel

它将显示每个品牌等的最大值,而不是仅显示绝对最大值的行。我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

您可以使用子查询获取carweight表的最大值,并将其等同于外部查询的carweight

SELECT  *
FROM    tableName
WHERE   carweight = (SELECT MAX(carweight) FROM tableName)

输出

╔═════════╦══════════╦═══════════╗
║ CARMAKE ║ CARMODEL ║ CARWEIGHT ║
╠═════════╬══════════╬═══════════╣
║ A       ║ B        ║      1000 ║
╚═════════╩══════════╩═══════════╝

这样做的好处是它支持关系,它们具有相同的carweight并且碰巧是最大值。