Saya membaca beberapa kode lama di tempat kerja, dan telah memperhatikan bahwa ada beberapa tampilan dengan order by 1
klausa. Apa yang dicapai ini?
Contoh:
Create view v_payment_summary AS
SELECT A.PAYMENT_DATE,
(SELECT SUM(paymentamount)
FROM payment B
WHERE PAYMENT_DATE = B.PAYMENT_DATE
and SOME CONDITION) AS SUM_X,
(SELECT SUM(paymentamount)
FROM payment B
WHERE PAYMENT_DATE = B.PAYMENT_DATE
and SOME OTHER CONDITION) AS SUM_Y
FROM payment A
ORDER BY 1;
sql
sql-order-by
gema
sumber
sumber
ORDER BY
dalamVIEW
. SQL standar tidak mengizinkannya. SQL Server telah melarangnya sejak 2005. Untuk implementasi SQL yang mengizinkannya, perilaku ini sebagian besar tidak berdokumen dan kontra intuitif. Dengan kata lain, pasti harus dihindari.TOP
ada, dan SSMS suka menambahkanTOP 100 PERCENT
.CHECK
kendala dalamCREATE TABLE
tetapi itu tidak benar-benar menghormatinya - itu tidak pernah benar-benar diperiksa! Pertanyaannya adalah, apakah produk SQL ini selalu menghormati yangORDER BY
dalam pandangan misalnya bila digunakan dalam query yang juga merupakanORDER BY
apakah itu mendapatkan diurutkan dua kali? Apakah mereka bahkan mendokumentasikan perilaku atau Anda harus melihat rencana eksekusi untuk menyelesaikannya? Saya pikir kita tahu jawabannya;)ORDER BY 1
... menggunakan trik lintas-aplikasi di mana Anda ingin alias kosong. Sayangnya kode mis terlalu besar untuk komentar jadi saya sudah mempostingnya sebagai jawaban di bawah FYI.Jawaban:
Ini:
... dikenal sebagai "Ordinal" - angka tersebut adalah singkatan dari kolom berdasarkan jumlah kolom yang ditentukan dalam klausa SELECT. Dalam kueri yang Anda berikan, itu berarti:
Ini bukan praktik yang disarankan, karena:
sumber
sql
tag. Dalam SQL Standar, hanya nama korelasi kolom yang diperbolehkan dalamOREDER BY
klausa karena, secara teori, nama korelasi tabel berada di luar cakupan yaitu seharusnyaORDER BY PAYMENT_DATE;
. Tentu saja, tidak semua implementasi SQL sesuai dengan Standar.;WITH cte AS( SELECT 1 AS Col1, 'z' AS Col2 UNION SELECT 2 AS Col1, 'y' AS Col2 UNION SELECT 3 AS Col1, 'x' AS Col2 ) SELECT Col2, Col1 FROM cte ORDER BY 1
Ini berguna ketika Anda menggunakan operator berbasis mis. Serikat pekerja
sumber
order by tablea.cola
itu hanya berarti menyortir tampilan atau tabel dengan kolom 1 hasil kueri.
sumber
Saya percaya pada Oracle artinya urutan dengan kolom # 1
sumber
Ini akan mengurutkan hasil Anda dengan kolom pertama yang dikembalikan. Dalam contoh itu akan mengurutkan berdasarkan payment_date.
sumber
Seperti yang disebutkan dalam jawaban lain
ORDER BY 1
perintah oleh kolom pertama.Saya menemukan contoh lain di mana Anda mungkin menggunakannya. Kami memiliki pertanyaan tertentu yang perlu dipesan pilih kolom yang sama. Anda akan mendapatkan kesalahan SQL jika memesan
Name
di bawah ini.sumber
Lihat juga:
http://www.techonthenet.com/sql/order_by.php
Untuk deskripsi pesanan oleh. Saya belajar sesuatu! :)
Saya juga pernah menggunakan ini di masa lalu ketika saya ingin menambahkan sejumlah filter tak tentu ke pernyataan sql. Ceroboh saya tahu, tetapi berhasil. : P
sumber
Contoh di sini dari sampel sampel database server WAMP: -
Dan ketika itu diberikan tambahan
order by PRIVILEGE_TYPE
atau bisa diberikanorder by 3
. Perhatikan kolom ke-3 (PRIVILEGE_TYPE
) diurutkan secara alfabet.PASTI, jawaban panjang dan banyak bergulir. Saya juga kesulitan untuk meneruskan output dari query ke file teks. Berikut adalah cara melakukannya tanpa menggunakan
into outfile
hal yang mengganggu-Dan ketika Anda selesai, hentikan logging-
Semoga ini menambah kejelasan.
sumber