当前位置:  开发笔记 > 后端 > 正文

查找第二大值的最简单的SQL查询是什么?

如何解决《查找第二大值的最简单的SQL查询是什么?》经验,为你挑选了7个好方法。

查找特定列中第二大整数值的最简单的SQL查询是什么?

列中可能存在重复值.



1> Matt Rogish..:
SELECT MAX( col )
  FROM table
 WHERE col < ( SELECT MAX( col )
                 FROM table )


Matt以及Vinoy的答案也照顾重复.假设重复最大值,那么使用Matt的答案将产生正确的第二大值,而如果使用_top 2 desc_和_min_方法,则可能获得最大值.

2> 小智..:
SELECT MAX(col) FROM table WHERE col NOT IN (SELECT MAX(col) FROM table);



3> Keith..:

在T-Sql中有两种方法:

--filter out the max
select max( col )
from [table]
where col < ( 
    select max( col )
    from [table] )

--sort top two then bottom one
select top 1 col 
from (
    select top 2 col 
    from [table]
    order by col) topTwo
order by col desc 

在Microsoft SQL中,第一种方法的速度是第二种方式的两倍,即使相关列是群集的.

这是因为与max聚合使用的表或索引扫描相比,排序操作相对较慢.

或者,在Microsoft SQL 2005及更高版本中,您可以使用以下ROW_NUMBER()功能:

select col
from (
    select ROW_NUMBER() over (order by col asc) as 'rowNum', col
    from [table] ) withRowNum 
where rowNum = 2



4> Joel Coehoor..:

我在这里看到了一些特定于SQL Server和一些MySQL特定的解决方案,因此您可能想要澄清所需的数据库.虽然如果我不得不猜测我会说SQL Server,因为这在MySQL中是微不足道的.

我也看到一些不起作用的解决方案,因为它们没有考虑到重复的可能性,所以要小心你接受哪些.最后,我看到一些会起作用但会对表进行两次完整扫描.您希望确保第二次扫描仅查看2个值.

SQL Server(2012年之前):

SELECT MIN([column]) AS [column]
FROM (
    SELECT TOP 2 [column] 
    FROM [Table] 
    GROUP BY [column] 
    ORDER BY [column] DESC
) a

MySQL的:

SELECT `column` 
FROM `table` 
GROUP BY `column` 
ORDER BY `column` DESC 
LIMIT 1,1

更新:

SQL Server 2012现在支持更清晰(和标准)的OFFSET/FETCH语法:

SELECT TOP 2 [column] 
FROM [Table] 
GROUP BY [column] 
ORDER BY [column] DESC
OFFSET 1 ROWS
FETCH NEXT 1 ROWS ONLY;



5> dguaraglia..:

我想你可以这样做:

SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT 1 OFFSET 1

要么

SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT (1, 1)

取决于您的数据库服务器.提示:SQL Server不执行LIMIT.



6> 小智..:

您可以使用以下查询找到列的第二大值

SELECT *
FROM TableName a
WHERE
  2 = (SELECT count(DISTINCT(b.ColumnName))
       FROM TableName b WHERE
       a.ColumnName <= b.ColumnName);

您可以在以下链接中找到更多详细信息

http://www.abhishekbpatel.com/2012/12/how-to-get-nth-maximum-and-minimun.html



7> Magnar..:

最简单的方法是从应用程序中的结果集中获取第二个值:

SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2

但是,如果必须使用SQL选择第二个值,那么如何:

SELECT MIN(value) FROM (SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2) AS t

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有