web-dev-qa-db-ja.com

Oracleで選択した行から行番号を取得する方法

私はデータベースからいくつかの行を選択しています:

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」です

誰かがクエリでこれを実装する方法を提案できますか?

10
Tushar

テーブルに固有の順序付けはありません。したがって、行番号自体は無意味なメトリックです。

ただし、 [〜#〜] 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以外で始まる場合、結果は異なる場合があります。たとえば、bBより大きいです。

29
Ben

あなたはただできる

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;
10
DazzaL

私は使用すると思います

_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%'
_
4
boyce

以下のクエリは、Oracleの行番号を取得するのに役立ちます。

SELECT ROWNUM AS SNO,ID,NAME,EMAIL,BRANCH FROM student WHERE NAME LIKE '%ram%';
2
Srinivasan.S