Sql 如何在不使用MAX函数的情况下查找列中的最大值?
一位朋友问我这个问题。给您的表中只有一个整型字段。在不使用MAX函数的情况下,是否可以指定字段中的最高值Sql 如何在不使用MAX函数的情况下查找列中的最大值?,sql,Sql,一位朋友问我这个问题。给您的表中只有一个整型字段。在不使用MAX函数的情况下,是否可以指定字段中的最高值 我想我们可以改变每一列的符号,用最小函数求最小值。对吗 是的,你可以否定一切,然后用min 当然,这最终会给你想要的值取反,然后你必须再次取反才能得到实际值 当然,除了学术兴趣之外,我很难相信你会找到一个带有min函数而没有max的DBMS 您也可以按该列降序排序,然后只提取第一行,如: select my_column from my_table order by my_column de
我想我们可以改变每一列的符号,用最小函数求最小值。对吗 是的,你可以否定一切,然后用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 descFETCH FIRST ROW ONLY仅适用于DB2,但它现在对所有这些备选方案都有很大的帮助。但是有一件事可以在所有数据库上运行吗?@Jamal:是的,MAX确实=其余的,目前没有人能保证。哈哈。那么Coddick的查询呢。我认为它们与任何数据库都有关联?思路很好!这是唯一不使用任何函数的解决方案!