现有张表 T1 字段为 a,b,c,d,e
现想要的结果为,不同C列 按e值 降序拍前5.
等于说 C有很多不同值, 每个值 取 E列 的前5.
比如C有 11个不同值,最后 select 的结果 应该是 11*5 55条 ,不知道这么说还清楚
sql server 取一个字段 的前5
答案:3 悬赏:10 手机版
解决时间 2021-02-09 17:24
- 提问者网友:绫月
- 2021-02-08 17:21
最佳答案
- 五星知识达人网友:七十二街
- 2021-02-08 17:28
是不是C列就是分类,E列就是具体的值,然后需要按照C分组,并取分组后的每组的E列的前5条?
如果是就看看以下语句
--分组排序
select row_number() over(partition by C order by E DESC) no,a,b,c,d,e
from t1
--将分组排序的查询当作一张表查询,需要按照上面排序,可以自己修改,这里处理为所描述的降序,根据no判断,小于等于5的就是需要的数据
select *
from (
select row_number() over(partition by C order by E DESC) no,a,b,c,d,e
from t1
) a
where a.no <= 5
如果是就看看以下语句
--分组排序
select row_number() over(partition by C order by E DESC) no,a,b,c,d,e
from t1
--将分组排序的查询当作一张表查询,需要按照上面排序,可以自己修改,这里处理为所描述的降序,根据no判断,小于等于5的就是需要的数据
select *
from (
select row_number() over(partition by C order by E DESC) no,a,b,c,d,e
from t1
) a
where a.no <= 5
全部回答
- 1楼网友:西风乍起
- 2021-02-08 19:07
select c,e from
(select c,e,row_number() over( partition by c order by e) rownum from tb)a
where rownum<=5
row_number是一个函数,按c分组,按e排序,然后给每行一个序号
然后从结果中去除序号小于等于5的就满足题意。
- 2楼网友:轻雾山林
- 2021-02-08 18:41
由于不知道你是用sqlserver还是oracle,我就先给你一个sqlserver版本的吧!
如果你的字段定义是id为字符类型(nvarchar或varchar),而goid也是字符类型的话就很简单了!
直接用like或者charindex就行了!
测试sql如下:
create table #1(id varchar(10),goid varchar(10));
insert into #1( id,goid)values('123456','345'),('222444','123'),('56789','89'),('123','1');
select * from #1 where id like '%'+goid+'%';
select * from #1 where charindex(goid,id)>0;
drop table #1;
如果你的字段定义是id为字符类型(nvarchar或varchar),而goid是整型(int,tinyint等)的话就要转换一下!
测试sql如下:
create table #2(id varchar(10),goid int);
insert into #2( id,goid)values('123456',345),('222444',123),('56789',89),('123',1);
select * from #2 where id like '%'+convert(varchar,goid)+'%';
select * from #2 where charindex(convert(varchar,goid),id)>0;
drop table #2;
如果不属于上面两种情况,参考照转换方法都可以解决!
下面是oracle版本的!
因为oracle会自己来处理这些问题,直接用like或instr就行了!不分类型哈!
测试sql如下:
create table t1 (id nvarchar2(10),goid varchar(10));
insert into t1( id,goid)values('123456','345');
insert into t1( id,goid)values('222444','123');
insert into t1( id,goid)values('56789','89');
insert into t1( id,goid)values('123','1');
select * from t1 where id like '%'||goid||'%';
select * from t1 where instr(id,goid)>0;
drop table t1;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯