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

查询以查找列的第n个最大值

如何解决《查询以查找列的第n个最大值》经验,为你挑选了5个好方法。

我想找到列的第2,第3 ......最大值



1> dexter..:

考虑以下Employee表,其中包含一列薪水.

+------+
| Sal  |
+------+
| 3500 | 
| 2500 | 
| 2500 | 
| 5500 |
| 7500 |
+------+

以下查询将返回第N个最大元素.

select SAL from EMPLOYEE E1 where 
 (N - 1) = (select count(distinct(SAL)) 
            from EMPLOYEE E2 
            where E2.SAL > E1.SAL )

例如.当需要第二个最大值时,

  select SAL from EMPLOYEE E1 where 
     (2 - 1) = (select count(distinct(SAL)) 
                from EMPLOYEE E2 
                where E2.SAL > E1.SAL )
+------+
| Sal  |
+------+
| 5500 |
+------+


一个简单的解决方案必将适用于所有数据库!好想!:)

2> TK...:

您可以将列排序为降序格式,然后从第n行获取值.

编辑::

根据评论请求更新.警告完全未经测试!

SELECT DOB FROM (SELECT DOB FROM USERS ORDER BY DOB DESC) WHERE ROWID = 6

像上面这样的东西应该适用于Oracle ......你可能必须首先获得正确的语法!



3> Pieter..:

您没有在MySQL上指定哪个数据库可以执行

SELECT column FROM table ORDER BY column DESC LIMIT 7,10;

将跳过前7,然后让你下一个十高.



4> 小智..:

同样,您可能需要修复数据库,但如果您希望数据集中的前2位值可能具有重复值,那么您还需要执行一个组:

SELECT column 
FROM table 
WHERE column IS NOT NULL 
GROUP BY column 
ORDER BY column DESC 
LIMIT 5 OFFSET 2;

将跳过前两个,然后将获得下一个五个最高.



5> Matt Rogish..:

纯SQL(请注意:我建议您使用DBMS特有的SQL功能,因为它可能会更有效)。这将使您获得第n + 1个最大值(要获得最小值,请翻转<)。如果重复,则将其设置为COUNT(DISTINCT VALUE)。

select id from table order by id desc limit 4 ;
+------+
| id   |
+------+
| 2211 | 
| 2210 | 
| 2209 | 
| 2208 | 
+------+


SELECT yourvalue
  FROM yourtable t1
 WHERE EXISTS( SELECT COUNT(*)
                 FROM yourtable t2
                WHERE t1.id       <> t2.id
                  AND t1.yourvalue < t2.yourvalue
               HAVING COUNT(*) = 3 )


+------+
| id   |
+------+
| 2208 | 
+------+

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