row_number()over(col1 ile bölünür, col2 sırası) grup içindeki col2'ye göre sıralanır ve bu fonksiyon tarafından hesaplanan değer, her grup dahili olarak sıralandıktan sonra sıralanan sıra numarasını (grup içindeki ardışık tekiz) temsil eder. Rownum'dan farkı, sıralama için rownum kullanıldığında, sonuç kümesine kötü bir rownum ekliyorsunuz ve sonra sıralar; row_number() önce sıralar, ardından sıralama maddesi eklendikten sonra satır numarasını hesaplar.
1. Kahinde Rownum
Sorgudan dönen satırlar numaralandırılmak için kullanılır; ilk döndürülen satıra 1, ikinci satıra 2 ve benzeri şekilde atanır; bu sahte alan, sorgu tarafından döndürülen toplam satır sayısını sınırlamak için kullanılabilir ve sıraya herhangi bir tablonun adı eklenemez.
1. Belirli bir değere eşit sorgu koşulları için rownum
Öğrenci tablosunda ilk öğrenciyi bulmak istiyorsanız, rownum=1'i koşul olarak kullanabilirsiniz. Ancak, öğrenci tablosunda ikinci öğrencinin bilgilerini bulmak istiyorsanız, rownum=2 kullanarak veriyi bulamazsınız. Çünkü rownum 1'den başlar, ancak 1'in üzerindeki doğal sayılar sıranın evet olarak değerlendirildiğinde yanlış sayılır, bu yüzden rownum = n(n>1 doğal sayı) bulmak imkansızdır.
2. Belirli bir değerden büyük sorgu koşulları için Rownum
İkinci satırdan itibaren kayıtları bulmak istiyorsanız, rownum>2 kullandığınızda kayıtları bulamazsanız, sorunu çözmek için aşağıdaki alt sorgu yöntemlerini kullanabilirsiniz. Alt sorgudaki sıranın bir takma adı olması gerekir, aksi takdirde kayıt bulunmaz, çünkü sıralık bir tablonun sütunu değildir ve eğer alias yoksa, sıranın alt sorgu sütunu mu yoksa ana sorgu sütunu mu olduğunu bilmek imkansızdır.
3. Belirli bir değerden küçük sorgu koşulları için rownum
Üçüncü kaydın önceki kaydını bulmak istiyorsanız, rownum<3 kullanırken iki kayıt elde edebilirsiniz. Elbette, rownum rownum < n (n>1'in doğal sayısı) koşulunun doğru olduğunu düşünüyor, yani kaydı bulabilirsiniz.
4. Rownum ve Sıralama
Oracle'daki rownum, veri alınırken oluşturulan dizi numarasıdır, bu yüzden belirtilen sıralanmış veri için rowmun satır verisini belirtmek istiyorsanız, buna dikkat etmelisiniz.
ROWNUM ID ADI ---------- ------ --------------------------------------------------- 3 200003 Li San 2 200002 Wang Er 1 200001 Zhang Yi 4 200004 Zhao Si
Görülebiliyor kiSıra, isim sütunu tarafından oluşturulan bir dizi numarası değildir。 Sistem, kayıt satırının sayısını, kaydın girildiği sırayla atar ve rowid de sırayla atanır. Bu sorunu çözmek için alt sorgular kullanılmalıdır
ROWNUM ID ADI ---------- ------ --------------------------------------------------- 1 200003 Li San 2 200002 Wang Er 3 200001 Zhang Yi 4 200004 Zhao Si
2. Oracle row_number ()
1、row_number() over (col_1[,col_2 ...]) col_1[,col_2 ...] Sıralama, sıralanmış sonuç kümesini döndürür ve her satır için farklı bir değer döndürür.
2、row_number() üzerinde (col_n[,col_m ...] siparişi col_1[,col_2 ...]) İlk olarak, col_n[,col_m ... gruplama, ardından her gruplama col_1[,col_2 ...] Sıralama (yükselen) ve sonunda sıralanmış sonuç kümesini döndür
Oracle row_number() örneği
1. Numaralandırmak için row_number() fonksiyonunu kullanın, örneğin
Prensip: Önce PSD'ye göre sıralayın, sıralamadan sonra her veri parçasını numaralayın.
2. Siparişi fiyat sıralamasına göre artan sırayla sıralayın ve her kaydı aşağıdaki kodla sıralayın:
3. Her müşterinin son zamanlarda verdiği sipariş sayısını sayın.
4. Over gibi pencere açma fonksiyonları kullanılırken, gruplama ve sıralama işlemi "where, group by, order by" uygulamasından daha geç olur.
Yukarıdaki kod önce where cümlesini çalıştırır, ardından her kaydı çalıştırır.
3. row_number () ile rownum arasındaki fark
Rownum ile sıralarken, sonuç kümesine kötü bir rownum ekler ve sonra onu sıralarsınız, row_number() ise önce sıralar ve sıralama cümlesini ekledikten sonra satır numarasını hesaplar. |