用sql语句查询表中第N(1,2,3等)大的数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用sql语句查询表中第N(1,2,3等)大的数相关的知识,希望对你有一定的参考价值。

一般不是只能查询最大或者最小嘛,我想查第2大第三大或者第四大的数该怎么写?

--我这里一共有13个数,1到13
--这句查出来就是13
select max(id) from cardInfo
--这句查出来就是1
select min(id) from cardInfo
--这句查出来的是比13小的数
select id from cardInfo where id < (select max(id) from cardInfo)
--比如现在就要取第二大,也就是12
select top 1 id from cardInfo where id < (select max(id) from cardInfo) order by id desc
--现在取第三大的数,11
select top 1 id from cardInfo where id < (select max(id) from cardInfo where id < (select max(id) from cardInfo)) order by id desc
--同理现在可以取第四大了,10
select top 1 id from cardInfo where id < (select max(id) from cardInfo where id < (select max(id) from cardInfo where id < (select max(id) from cardInfo))) order by id desc

把他复制到查询分析器里面能看得更清楚.
参考技术A select top 1 id
from tablename
where id not in (select top N-1 id from tablename order by id desc) t
order by id desc

用数字替代那个N,就能得到第几大的数了本回答被提问者采纳
参考技术B 一楼回答的很全面啊!我也要学习啊

无序数组中第Kth大的数

题目:找出无序数组中第Kth大的数,如{63,45,33,21},第2大的数45。

输入:

第一行输入无序数组,第二行输入K值。

该是内推滴滴打车时(2017.8.26)的第二题,也是《剑指offer》上最小k个数的变形。当时一看到题,这个不是用快排吗?然后就写了,结果始终没有通过,遗憾的超时提交了。错误点主要在于,这里求的是第K大的数,而若是我们使用K去判断快排得到的下标,得到的是第K个数(等同于排序以后从左往右下标为K-1),而题中隐藏的意思等同于排序以后从 右往左数第K个数。所写在写代码的时候要注意一个K值得转换。

 1 #include<iostream>
 2 #include<vector>
 3 #include<algorithm>
 4 
 5 using namespace std;
 6 
 7 int patiton(vector<int> &ivec,int left,int right);
 8 int main()
 9 {
10     vector<int> ivec;
11     int x;
12     while(cin>>x)
13     {
14         ivec.push_back(x);
15     }
16     int K;
17     cin>>K;
18 
19     int left=0,right=ivec.size()-1;
20     int index=patiton(ivec,left,right);
21     K=ivec.size()-K;        //注意这行
22     while(index !=K)
23     {
24         if(index<K)
25             left=index+1;
26         else
27             right=index-1;   
28         index=patiton(ivec,left,right);
29     }
30     cout<<ivec[K];
31     return 0;
32 }
33 
34 int patiton(vector<int> &ivec,int left,int right)
35 {
36     int i=left-1;
37     
38     int pivot=ivec[right];
39     for(int j=left;j<right;j++)
40     {
41         if(ivec[j]<=pivot)
42         {
43             i++;
44             swap(ivec[i],ivec[j]);
45         }
46     }
47     swap(ivec[i+1],ivec[right]);
48     return i+1;
49 }

注意:在本地IDE编译的时候,while(cin>>x)会存在一个退出的问题。这个可以上网百度一下就行。

以上是关于用sql语句查询表中第N(1,2,3等)大的数的主要内容,如果未能解决你的问题,请参考以下文章

寻找数组中第K大的数

找数组中第K大的数 请教

无序数组中第Kth大的数

数组中第 K 大的数(leetcode 215)

数组中第 K 大的数(leetcode 215)

C++ 输入一组数组 找出这个数组中第2大的数 这个函数 怎么写