加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在SQL中有没有相当于argmax的东西?

发布时间:2020-12-12 16:36:47 所属栏目:MsSql教程 来源:网络整理
导读:在更一般的意义上:是否有一个函数可以让我找到列X中的值是列的最大值的整行? 解决方法 不是具体的功能,没有. 根据需要和数据库支持哪些功能,可以编写查询的方法很多. 子查询: 如果任何共享值相同,这种方法有可能返回一行以上: SELECT x.* FROM YOUR_TABLE
在更一般的意义上:是否有一个函数可以让我找到列X中的值是列的最大值的整行?

解决方法

不是具体的功能,没有.

根据需要和数据库支持哪些功能,可以编写查询的方法很多.

子查询:

如果任何共享值相同,这种方法有可能返回一行以上:

SELECT x.*
  FROM YOUR_TABLE x
 WHERE x.column = (SELECT MAX(y.column)
                     FROM YOUR_TABLE y)

自我加盟:

如果任何共享值相同,这种方法有可能返回一行以上:

SELECT x.*
  FROM YOUR_TABLE x
  JOIN (SELECT MAX(t.column) AS max_col
          FROM YOUR_TABLE t) y ON y.max_col = x.column

LIMIT / TOP:

SQL Server支持TOP:

SELECT TOP 1 
         x.*
    FROM YOUR_TABLE x
ORDER BY x.column DESC

MySQL& PostgreSQL支持限制:

SELECT x.*
    FROM YOUR_TABLE x
ORDER BY x.column DESC
   LIMIT 1

分析 – ROW_NUMBER():

这将返回一行,并且可以配置为提供每个分组的最高(或最低)值.但是,此功能是Oracle 9i,SQL Server 2005和PostgreSQL 8.4.

SELECT x.*
  FROM (SELECT y.*,ROW_NUMBER() OVER (ORDER BY y.column DESC) AS rank
          FROM YOUR_TABLE y) x
 WHERE x.rank = 1

分析 – DENSE_RANK():

如果它们共享相同的值,则可以返回多个行,并且可以将其配置为提供每个分组的最高(或最低)值.但是,DENSE_RANK() OVER (ORDER BY y.column DESC) AS rank FROM YOUR_TABLE y) x WHERE x.rank = 1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读