我从数据库中选择了几行,例如:
select * from student where name is like %ram%
结果:
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
我需要得到哪个分支是B5的行号。预期值为“5”
有人可以建议如何在查询中实现此功能吗?
答案 0 :(得分:27)
表格没有固有的排序。因此,行号本身就是一个毫无意义的指标。
但是,您可以使用ROWNUM psuedocolumn或ROW_NUMBER()
分析函数来获取结果集的行号,这是更强大的。
由于没有对表的排序,所以都需要显式的ORDER BY子句才能工作。
select rownum, a.*
from ( select *
from student
where name like '%ram%'
order by branch
) a
或使用分析查询
select row_number() over ( order by branch ) as rnum, a.*
from student
where name like '%ram%'
您的语法where name is like ...
不正确,不需要IS,所以我已将其删除。
此处的ORDER BY依赖于二进制排序,因此如果分支以B以外的任何内容开头,则结果可能会有所不同,例如b
大于B
。
答案 1 :(得分:10)
你可以做到
select rownum, l.* from student l where name like %ram%
这会在获取行时分配行号(因此当然不能保证排序)。
如果您想先订购,请执行以下操作:
select rownum, l.*
from (select * from student l where name like %ram% order by...) l;
答案 2 :(得分:4)
我认为使用
select rownum st.Branch
from student st
where st.name like '%ram%'
是一种简单的方法;你应该在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%'
答案 3 :(得分:2)
以下查询有助于获取oracle中的行号,
SELECT ROWNUM AS SNO,ID,NAME,EMAIL,BRANCH FROM student WHERE NAME LIKE '%ram%';