Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana NTILE() Bekerja di SQL Server

Di SQL Server, NTILE() fungsi memungkinkan Anda untuk mendistribusikan baris dalam partisi yang dipesan ke dalam jumlah grup yang ditentukan. Grup diberi nomor, mulai dari 1. Untuk setiap baris, NTILE() mengembalikan nomor grup tempat baris tersebut berada.

Anda cukup memberikan jumlah grup yang Anda inginkan saat memanggil fungsi.

Sintaks

Sintaksnya seperti ini:

NTILE (integer_expression) OVER ( [  ]  )

ekspresi_integer adalah ekspresi bilangan bulat positif yang menentukan jumlah grup di mana setiap partisi harus dibagi. Itu bisa bertipe int , atau besar .

adalah opsional. Ini membagi set hasil yang dihasilkan oleh FROM klausa ke dalam partisi tempat fungsi diterapkan.

Dibutuhkan. Ini menentukan urutan NTILE() nilai ditugaskan ke baris dalam partisi. Sebuah bilangan bulat tidak dapat mewakili kolom ketika digunakan dalam fungsi peringkat.

Contoh 1 – Penggunaan Dasar

Berikut adalah contoh dasar yang menunjukkan cara kerja fungsi ini:

SELECT Player, Score, NTILE(4) OVER (ORDER BY Score DESC) 'NTILE'FROM Scoreboard;

Hasil:

+----------+---------+---------+| Pemain | Skor | NTILE ||----------+---------+---------|| Bart | 2010 | 1 || Terbakar | 1270 | 1 || Meg | 1030 | 2 || Marge | 990 | 2 || Lisa | 710 | 3 || Ned | 666 | 3 || apu | 350 | 4 || Homer | 1 | 4 |+----------+---------+---------+

Dalam hal ini ada 8 hasil dan nilai yang saya berikan ke NTILE() adalah 4, sehingga nilainya tersebar merata di 4 kelompok.

Contoh 2 – Ubah Nilai NTILE

Inilah yang terjadi jika saya mengubah NTILE() nilai ke 3.

PILIH Pemain, Skor, NTILE(3) OVER (ORDER BY Score DESC) 'NTILE'FROM Scoreboard;

Hasil:

+----------+---------+---------+| Pemain | Skor | NTILE ||----------+---------+---------|| Bart | 2010 | 1 || Terbakar | 1270 | 1 || Meg | 1030 | 1 || Marge | 990 | 2 || Lisa | 710 | 2 || Ned | 666 | 2 || apu | 350 | 3 || Homer | 1 | 3 |+----------+---------+---------+

Hasilnya didistribusikan ke 3 kelompok. Seperti yang Anda duga, grup terakhir berakhir dengan hanya 2 baris (dibandingkan dengan 3 untuk grup lain).

Contoh 3 – Mengganti Pengurutan

Mengalihkan urutan antara naik dan turun biasanya akan menghasilkan NTILE() nilai yang diterapkan ke baris yang berbeda.

PILIH Pemain, Skor, NTILE(4) OVER (ORDER BY Score DESC) 'NTILE Descending', NTILE(4) OVER (ORDER BY Score ASC) 'NTILE Ascending'FROM ScoreboardORDER BY Score DESC;

Hasil:

+----------+--------+---------+----- ---------------+| Pemain | Skor | NTILE Turun | NTILE Ascending ||----------+---------+--------------------+---- ---------------|| Bart | 2010 | 1 | 4 || Terbakar | 1270 | 1 | 4 || Meg | 1030 | 2 | 3 || Marge | 990 | 2 | 3 || Lisa | 710 | 3 | 2 || Ned | 666 | 3 | 2 || apu | 350 | 4 | 1 || Homer | 1 | 4 | 1 |+----------+--------+--------------------+----- --------------+

Namun, ini akan tergantung pada berapa banyak baris dalam kumpulan hasil vs jumlah NTILE. Jelas, jika NTILE() nilainya 1, maka tidak akan ada perbedaan.

SELECT Player, Score, NTILE(1) OVER (ORDER BY Score DESC) 'NTILE Descending', NTILE(1) OVER (ORDER BY Score ASC) 'NTILE Ascending'FROM ScoreboardORDER BY Score DESC;

Hasil:

+----------+--------+---------+----- ---------------+| Pemain | Skor | NTILE Turun | NTILE Ascending ||----------+---------+--------------------+---- ---------------|| Bart | 2010 | 1 | 1 || Terbakar | 1270 | 1 | 1 || Meg | 1030 | 1 | 1 || Marge | 990 | 1 | 1 || Lisa | 710 | 1 | 1 || Ned | 666 | 1 | 1 || apu | 350 | 1 | 1 || Homer | 1 | 1 | 1 |+----------+--------+--------------------+----- --------------+

Hal yang sama akan terjadi jika kumpulan hasil hanya berisi satu baris, terlepas dari NTILE() nilai:

PILIH Pemain, Skor, NTILE(4) OVER (ORDER BY Score DESC) 'NTILE Descending', NTILE(4) OVER (ORDER BY Score ASC) 'NTILE Ascending'FROM ScoreboardWHERE Score> 2000ORDER BY Score DESC; 

Hasil:

+----------+--------+---------+----- ---------------+| Pemain | Skor | NTILE Turun | NTILE Ascending ||----------+---------+--------------------+---- ---------------|| Bart | 2010 | 1 | 1 |+----------+--------+--------------------+----- --------------+

Contoh 4 – Partisi

Anda dapat menggunakan PARTITION BY klausa untuk membagi hasil menjadi partisi. Saat Anda melakukan ini, NTILE() diterapkan pada setiap partisi.

Contoh:

PILIH TeamName, Pemain, Skor, NTILE(2) OVER (PARTITION BY TeamName ORDER BY Score ASC) 'NTILE'FROM Scoreboard sINNER JOIN Team tON t.TeamId =s.TeamId;

Hasil:

+------------+----------+---------+------------ -------+| Nama Tim | Pemain | Skor | NTILE ||------------+----------+---------+------------- ------|| Anjing laut | apu | 350 | 1 || Anjing laut | Ned | 666 | 1 || Anjing laut | Meg | 1030 | 2 || Anjing laut | Terbakar | 1270 | 2 || Simpsons | Homer | 1 | 1 || Simpsons | Lisa | 710 | 1 || Simpsons | Marge | 990 | 2 || Simpsons | Bart | 2010 | 2 |+------------+----------+---------+------------- ------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. datetime vs smalldatetime di SQL Server:Apa Bedanya?

  2. SQL Server 2016 – Pengantar Peregangan Database

  3. Cara mengambil nama bidang dari tabel sementara (SQL Server 2008)

  4. Menyimpan file di SQL Server

  5. Bagaimana cara mengubah ruang kosong menjadi nilai nol, menggunakan SQL Server?