在SQL中是否有与argmax相同的东西?

Chr*_*ine 21 sql

在更一般的意义上:是否有一个函数可以让我找到整列,其中列X中的值是列的最大值?

OMG*_*ies 37

不是特定的功能,没有.

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

子查询:

如果共享相同的值,则此方法可能会返回多行:

SELECT x.*
  FROM YOUR_TABLE x
 WHERE x.column = (SELECT MAX(y.column)
                     FROM YOUR_TABLE y)
Run Code Online (Sandbox Code Playgroud)

自我加入:

如果共享相同的值,则此方法可能会返回多行:

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
Run Code Online (Sandbox Code Playgroud)

LIMIT/TOP:

SQL Server支持TOP:

  SELECT TOP 1 
         x.*
    FROM YOUR_TABLE x
ORDER BY x.column DESC
Run Code Online (Sandbox Code Playgroud)

MySQL和PostgreSQL支持LIMIT:

  SELECT x.*
    FROM YOUR_TABLE x
ORDER BY x.column DESC
   LIMIT 1
Run Code Online (Sandbox Code Playgroud)

分析 - 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 
Run Code Online (Sandbox Code Playgroud)

分析 - DENSE_RANK():

如果它们共享相同的值,则可以返回多行,并且可以配置为每个分组提供最高(或最低)值.但是,此功能是Oracle 9i +,SQL Server 2005+和PostgreSQL 8.4+.

SELECT x.*
  FROM (SELECT y.*,
               DENSE_RANK() OVER (ORDER BY y.column DESC) AS rank
          FROM YOUR_TABLE y) x
 WHERE x.rank = 1 
Run Code Online (Sandbox Code Playgroud)

  • 你错过了一个.SELF ANTI-JOIN对不等式`SELECT t.*FROM t LEFT JOIN t2 on t.field <t2.field WHERE t2.field为null (7认同)

Osw*_*ald 1

SELECT *
FROM mytable
WHERE mycolumn = (
  SELECT MAX(mycolumn) FROM mytable
)
Run Code Online (Sandbox Code Playgroud)