16

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

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」

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

4

4 に答える 4

40

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

ただし、 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 以外で始まる場合、結果は異なる場合があります。たとえば、bis greater thanBです。

于 2013-01-28T08:03:42.673 に答える
12

あなたはただすることができます

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;
于 2013-01-28T08:02:54.717 に答える
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%'
于 2013-01-28T10:03:38.173 に答える
2

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

SELECT ROWNUM AS SNO,ID,NAME,EMAIL,BRANCH FROM student WHERE NAME LIKE '%ram%';
于 2014-10-06T15:06:33.893 に答える