Tus*_*har 10 sql oracle rownum
我从数据库中选择几行,例如:
select * from student where name is like %ram%
Run Code Online (Sandbox Code Playgroud)
结果:
ID Name email Branch
7 rama rama@gmail.com B1
5 ramb ramb@gmail.com B2
3 ramc ramc@gmail.com B3
8 ramd ramd@gmail.com B4
11 rame rame@gmail.com B5
12 ramf ramf@gmail.com B6
14 ramg ramg@gmail.com B7
Run Code Online (Sandbox Code Playgroud)
我需要得到哪个分支是B5的行号.预期值为"5"
有人可以建议如何在查询中实现这一点?
Ben*_*Ben 29
表没有固有的排序.因此,行号本身是无意义的度量.
但是,您可以使用ROWNUM psuedocolumn或更强大的分析函数来获取结果集的行号.ROW_NUMBER()
由于没有对表的排序,因此需要显式的ORDER BY子句才能工作.
select rownum, a.*
from ( select *
from student
where name like '%ram%'
order by branch
) a
Run Code Online (Sandbox Code Playgroud)
或使用分析查询
select row_number() over ( order by branch ) as rnum, a.*
from student
where name like '%ram%'
Run Code Online (Sandbox Code Playgroud)
你的语法where name is like ...不正确,不需要IS,所以我删除了它.
ORDER BY在这里依赖于二进制排序,因此如果分支以除B之外的任何内容开始,则结果可能不同,例如b大于B.
Daz*_*zaL 10
你可以这样做
select rownum, l.* from student l where name like %ram%
Run Code Online (Sandbox Code Playgroud)
这会在获取行时分配行号(因此当然不能保证排序).
如果你想先订购:
select rownum, l.*
from (select * from student l where name like %ram% order by...) l;
Run Code Online (Sandbox Code Playgroud)
小智 5
我认为使用
select rownum st.Branch
from student st
where st.name like '%ram%'
Run Code Online (Sandbox Code Playgroud)
是一个简单的方法;您应该在 LIKE 语句中添加单引号。如果您使用row_number(),您应该添加over (order by 'sort column' 'asc/desc'),例如:
select st.branch, row_number() over (order by 'sort column' 'asc/desc')
from student st
where st.name like '%ram%'
Run Code Online (Sandbox Code Playgroud)