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

Cara Menyertakan Hasil yang Mengikat untuk Tempat Terakhir saat Menggunakan Klausa TOP di SQL Server

Saat menggunakan TOP klausa dalam kueri di SQL Server, Anda mungkin menemukan kesempatan di mana dua atau lebih hasil mengikat untuk tempat terakhir. Anda mungkin bahkan tidak akan tahu kapan ini terjadi, karena perilaku default TOP adalah mengembalikan tidak lebih dari jumlah baris yang Anda tentukan.

TOP klausa menerima WITH TIES argumen yang memungkinkan Anda menentukan apakah akan menyertakan semua hasil yang mengikat untuk tempat terakhir atau tidak. Baris dapat mengikat untuk tempat terakhir karena ORDER BY their kolom yang berisi nilai yang sama. Oleh karena itu, menggunakan argumen ini dapat menghasilkan lebih banyak baris yang dikembalikan daripada yang sebenarnya Anda tentukan.

Contoh 1 – Data

Pertama, inilah data yang akan kita kerjakan dalam contoh berikut:

PILIH AlbumId, AlbumName, ArtistId FROM Albums;

Hasil:

+-----------+--------------------------+------- -----+| Id Album | Nama Album | ArtistId ||-----------+--------------------------+-------- ----|| 1 | budak kekuasaan | 1 || 2 | Daya | 2 || 3 | Bernyanyi di Jalan | 6 || 4 | Ziltoid Yang Mahatahu | 5 || 5 | Korban Keren | 5 || 6 | Epicloud | 5 || 7 | Di suatu tempat dalam Waktu | 1 || 8 | Sepotong Pikiran | 1 || 9 | Pembunuh | 1 || 10 | Tidak Ada Doa untuk Kematian | 1 || 11 | Tidak Ada Suara Tanpa Keheningan | 9 || 12 | Wajah Ayunan Besar | 4 || 13 | Malam Biru | 12 || 14 | Keabadian | 12 || 15 | Skandinavia | 12 || 16 | Koper Lama Hilang | 7 || 17 | Memuji dan Menyalahkan | 7 || 18 | Seiring Datanglah Jones | 7 || 19 | Semua Malam Salah | 3 || 20 | Enam Belas Pria Tain | 3 || 21 | Yo Wassup | 9 || 22 | rusak | 9 |+-----------+--------------------------+-------- ----+

Contoh 2 – Gunakan TOP Tanpa Ikatan

Inilah yang terjadi jika kita menggunakan TOP tanpa menentukan WITH TIES . Ini adalah cara kebanyakan orang menggunakan klausa ini.

Dalam hal ini, saya mengurutkan hasil dengan ArtistId .

SELECT TOP(3) AlbumId, AlbumName, ArtistId FROM AlbumsORDER BY ArtistId ASC;

Hasil:

+-----------+-------------------+------------+| Id Album | Nama Album | ArtistId ||-----------+-------------------+------------|| 1 | budak kekuasaan | 1 || 7 | Di suatu tempat dalam Waktu | 1 || 8 | Sepotong Pikiran | 1 |+-----------+-------------------+------------+ 

Seperti yang diharapkan, kami mendapatkan tiga baris. Ini adalah tiga teratas seperti yang ditentukan oleh TOP klausa.

Contoh 3 – Gunakan TOP Dengan Ties

Sekarang untuk ikatan. Inilah yang terjadi jika kita menambahkan WITH TIES .

PILIH TOP(3) DENGAN Ikatan AlbumId, AlbumName, ArtistId FROM AlbumsORDER BY ArtistId ASC;

Hasil:

+-----------+--------------+-------- ----+| Id Album | Nama Album | ArtistId ||-----------+--------------+--------- ---|| 1 | budak kekuasaan | 1 || 7 | Di suatu tempat dalam Waktu | 1 || 8 | Sepotong Pikiran | 1 || 9 | Pembunuh | 1 || 10 | Tidak Ada Doa untuk Kematian | 1 |+-----------+--------------+--------- ---+

Kami sekarang mendapatkan lima baris, bukan hanya tiga. Ini karena ada dua baris lagi yang memiliki ArtistId yang sama sebagai baris ketiga. Dengan kata lain, tiga baris mengikat untuk tempat terakhir.

Perhatikan bahwa di SQL Server, urutan kembali dari mengikat baris adalah arbitrer.

Contoh 4 – Klausa ORDER BY yang Dimodifikasi untuk Menghilangkan Ikatan

Jika kita menambahkan AlbumId kolom ke ORDER BY klausa, ini menghilangkan ikatan sama sekali.

SELECT TOP(3) WITH TIES AlbumId, AlbumName, ArtistId FROM AlbumsORDER BY ArtistId ASC, AlbumId ASC;

Hasil:

+-----------+-------------------+------------+| Id Album | Nama Album | ArtistId ||-----------+-------------------+------------|| 1 | budak kekuasaan | 1 || 7 | Di suatu tempat dalam Waktu | 1 || 8 | Sepotong Pikiran | 1 |+-----------+-------------------+------------+ 

Jadi meskipun kita menentukan WITH TIES , tidak ada yang hadir dalam kasus ini.

Contoh 5 – Menggunakan Klausa WHERE

Berikut ini satu contoh terakhir, di mana saya menggunakan WHERE klausa untuk mengekstrak sekelompok baris dari tengah tabel. Contoh pertama adalah tanpa ikatan, dan yang kedua dengan ikatan.

Tanpa ikatan:

PILIH TOP(4) AlbumId, AlbumName, ArtistId FROM AlbumsWHERE AlbumId> 10ORDER BY ArtistId ASC;

Hasil:

+-----------+--------------+-------- ----+| Id Album | Nama Album | ArtistId ||-----------+--------------+--------- ---|| 19 | Semua Malam Salah | 3 || 20 | Enam Belas Pria Tain | 3 || 12 | Wajah Ayunan Besar | 4 || 16 | Koper Lama Hilang | 7 |+-----------+--------------+--------- ---+

Dengan ikatan:

PILIH TOP(4) DENGAN Ikatan AlbumId, AlbumName, ArtistId FROM AlbumsWHERE AlbumId> 10ORDER BY ArtistId ASC;

Hasil:

+-----------+--------------+-------- ----+| Id Album | Nama Album | ArtistId ||-----------+--------------+--------- ---|| 19 | Semua Malam Salah | 3 || 20 | Enam Belas Pria Tain | 3 || 12 | Wajah Ayunan Besar | 4 || 16 | Koper Lama Hilang | 7 || 17 | Memuji dan Menyalahkan | 7 || 18 | Seiring Datanglah Jones | 7 |+-----------+--------------+--------- ---+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Buat Login

  2. Melaporkan Data Kinerja SQLDIAG melalui Alat Utilitas RML | Pemecahan Masalah Kinerja SQL Server -7

  3. Bagaimana cara membuat daftar contoh SQL Server yang tersedia menggunakan SMO di C #?

  4. SQL Server:Perbedaan antara PARTITION BY dan GROUP BY

  5. Optimalisasi kueri SQL:Praktik terbaik untuk meningkatkan kinerja