私はデータベースからいくつかの行を選択しています:
select * from student where name is like %ram%
結果:
ID Name email Branch
7 rama [email protected] B1
5 ramb [email protected] B2
3 ramc [email protected] B3
8 ramd [email protected] B4
11 rame [email protected] B5
12 ramf [email protected] B6
14 ramg [email protected] B7
ブランチがB5である行番号を取得する必要があります。期待値は「5」です
誰かがクエリでこれを実装する方法を提案できますか?
テーブルに固有の順序付けはありません。したがって、行番号自体は無意味なメトリックです。
ただし、 [〜#〜] rownum [〜#〜] を使用して、結果セットの行番号を取得できます。 =疑似列または 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
より大きいです。
あなたはただできる
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;
私は使用すると思います
_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%'
_
以下のクエリは、Oracleの行番号を取得するのに役立ちます。
SELECT ROWNUM AS SNO,ID,NAME,EMAIL,BRANCH FROM student WHERE NAME LIKE '%ram%';