Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在不使用MAX函数的情况下查找列中的最大值?_Sql - Fatal编程技术网

Sql 如何在不使用MAX函数的情况下查找列中的最大值?

Sql 如何在不使用MAX函数的情况下查找列中的最大值?,sql,Sql,一位朋友问我这个问题。给您的表中只有一个整型字段。在不使用MAX函数的情况下,是否可以指定字段中的最高值 我想我们可以改变每一列的符号,用最小函数求最小值。对吗 是的,你可以否定一切,然后用min 当然,这最终会给你想要的值取反,然后你必须再次取反才能得到实际值 当然,除了学术兴趣之外,我很难相信你会找到一个带有min函数而没有max的DBMS 您也可以按该列降序排序,然后只提取第一行,如: select my_column from my_table order by my_column de

一位朋友问我这个问题。给您的表中只有一个整型字段。在不使用MAX函数的情况下,是否可以指定字段中的最高值


我想我们可以改变每一列的符号,用最小函数求最小值。对吗

是的,你可以否定一切,然后用min

当然,这最终会给你想要的值取反,然后你必须再次取反才能得到实际值

当然,除了学术兴趣之外,我很难相信你会找到一个带有min函数而没有max的DBMS

您也可以按该列降序排序,然后只提取第一行,如:

select my_column from my_table
order by my_column desc
fetch first row only;

对。您可以这样做:

select MIN(-1 * col)*-1 as col from tableName;
或者,如果数据库支持LIMIT子句,也可以使用LIMIT子句

另一种选择是使用表的自联接。考虑查询:

select A.col, B.col
from tableName as A, tableName as B
where A.col < B.col
它找到所有可能的对,只保留第一个字段小于第二个字段的对。因此,最大值不会出现在第一个字段中,因为它不小于任何其他值

您可以使用上述查询作为子查询,仅选择最大值,如下所示:

select col from tableName where col not in
( select A.col from tableNAme as A, tableName as B
  where A.col < B.col)

如果该表有多个max值,则上述查询将返回所有max值。要解决此问题,您可以在外部选择中使用distinct。

使用按数字顺序描述限制1

任何人都可以猜测您为什么会忽略使用任何数据库支持的函数,特别是如果您使用MIN函数,但是

最大的 …一些数据库供应商支持最大的功能:

SELECT GREATEST(column)
  FROM ...
最大值返回指定的所有列中的最大值。支持最广泛的方案包括:

上限 TOP仅限SQL Server 2000+版本:

  SELECT TOP 1 column
    FROM YOUR_TABLE
ORDER BY column DESC
限制仅受MySQL、PostgreSQL和SQLite支持

  SELECT column
    FROM YOUR_TABLE
ORDER BY column DESC
   LIMIT 1
行号 PostgreSQL 8.4+、Oracle 9i+、SQL Server 2005+支持行号:

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

让我们用更多的方法来做吧

SELECT DISTINCT t1.col
FROM tableName t1
  LEFT JOIN tableName t2
    ON t2.col > t1.col AND t2.col IS NOT NULL
WHERE t2.col IS NULL

下面的查询还可以获取特定列的最大值,而无需使用MAX函数

从中选择顶部1列
tablename order by col desc

FETCH FIRST ROW ONLY仅适用于DB2,但它现在对所有这些备选方案都有很大的帮助。但是有一件事可以在所有数据库上运行吗?@Jamal:是的,MAX确实=其余的,目前没有人能保证。哈哈。那么Coddick的查询呢。我认为它们与任何数据库都有关联?思路很好!这是唯一不使用任何函数的解决方案!