extra1, extra2, ...
adalah "kolom tambahan" dalam terminologi tab silang.
Manual untuk modul tablefunc
menjelaskan aturannya:
Dan lebih jauh ke bawah:
Penekanan berani pada bagian-bagian penting oleh saya.
Anda hanya mengurutkan berdasarkan row_name
:
ORDER BY row_name ASC
Tidak masalah dalam contoh pertama di mana Anda memfilter dengan:
WHERE ... t.extra1 = 'val1' -- single quotes by me
Semua baris input memiliki extra1 = 'val1'
omong-omong. Tapi itu penting dalam contoh kedua di mana Anda memfilter dengan:
WHERE ... t.extra1 IN('val1', ...) --> More values
Sekarang, persyaratan pertama yang dicetak tebal di atas dilanggar untuk kolom ekstra extra1
. Meskipun urutan kueri masukan pertama bersifat non-deterministik, nilai yang dihasilkan untuk kolom "ekstra" extra1
dipetik secara sewenang-wenang. Nilai yang lebih mungkin untuk extra1
, semakin sedikit baris yang akan berakhir dengan 'val1':itulah yang Anda amati.
Anda masih dapat membuatnya bekerja:untuk melaporkan extra1 = 'val1'
untuk setiap row_name
yang memiliki setidaknya satu dari itu, ubah ORDER BY
ke:
ORDER BY row_name, (extra1 <> 'val1')
Urutkan 'val1' di atas. Penjelasan untuk boolean
itu ekspresi (dengan tautan ke lebih banyak):
Kolom "ekstra" lainnya masih dipilih secara sewenang-wenang sementara urutan pengurutannya tidak deterministik.
Dasar-dasar tab silang: