用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等)大的数的主要内容,如果未能解决你的问题,请参考以下文章