【问题标题】:SQL get just one column from the max value [duplicate]SQL仅从最大值中获取一列[重复]
【发布时间】:2021-01-13 15:52:53
【问题描述】:

我有这张桌子

| sale_id | amount |
| ------- | ------ |
| 5       | 3      |
| 1       | 2      |
| 3       | 1      |

我只需要选择最大金额的 sale_id,只需选择数字 id 5,因为 3 是最大金额。听起来很简单,但我遇到了这个问题。

有人可以帮帮我吗?

【问题讨论】:

  • 您使用的是哪种 DBMS 产品? “SQL”只是所有关系数据库都使用的一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tagWhy should I tag my DBMS
  • 如果有一个 sale_id 6 并且 amount = 3 怎么办?
  • 这能回答你的问题吗? How to select top N from a table。我希望这里有很多好的答案可以随着时间的推移(使用新版本或 DBMS)得到改进,而不是在相同的问题上有很多相同的答案。

标签: sql max


【解决方案1】:

在标准 SQL 中,如下所示:

select sale_id
from t
order by amount desc
fetch first 1 row only;

并非所有数据库都支持fetch 子句,但都有一些机制可以返回一行结果集,例如limitselect top

【讨论】:

    【解决方案2】:

    MS SQL 方言

    select top 1 sale_id
    from tbl
    order by amount desc
    

    【讨论】:

      【解决方案3】:

      在 SQL Server 中,这可以通过以下方式实现:

      SELECT TOP 1 sale_id FROM t order by amount desc
      

      如果您有重复的最大数量并且需要同时获取两个 sale_id,那么您可以使用窗口功能。

      【讨论】:

      • 第二个查询将产生错误“not a group by”或类似的错误,因为子查询中没有group by 部分。它也不会回答这个问题:每个sale_id 会有最大数量,而不是单行
      • @astentx 你是对的。它会给出一个 groupby 错误。我已将其从答案中删除:)
      猜你喜欢
      • 2017-09-12
      • 1970-01-01
      • 2016-11-13
      • 2019-07-13
      • 1970-01-01
      • 2020-05-02
      • 2013-11-15
      • 2018-02-09
      • 2020-04-16
      相关资源
      最近更新 更多