SQL Academy · Pelajaran

Klausa Bingkai: ROWS berbanding RANGE

Pilih antara klausa bingkai ROWS BETWEEN dan RANGE BETWEEN, serta fahami cara setiap satunya mengendalikan pendua dan jurang.

Pelajaran 1 daripada 414 langkah

Klausa Bingkai: ROWS berbanding RANGE ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Bingkai dalam OVER

Fungsi tetingkap menilai bingkai — subset baris daripada partisi. Bingkai ditentukan oleh:

OVER (
  PARTITION BY ...
  ORDER BY ...
  ROWS BETWEEN <start> AND <end>     -- or RANGE BETWEEN ...
)

Bingkai Lalai

Jika anda menentukan ORDER BY tetapi tidak menentukan bingkai, nilai lalainya ialah:

RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-- "From the first row up to all rows tied with the current row".

ROWS Mengira Secara Fizikal

ROWS mengira N baris mengikut susunan partisi, tanpa mengira nilainya:

SUM(x) OVER (ORDER BY day ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
-- The current row plus the previous 2.  Exactly 3 rows.

RANGE Mengira Mengikut Nilai

RANGE mengira baris yang nilainya untuk ORDER BY berada dalam julat sekitar nilai semasa:

SUM(x) OVER (
  ORDER BY day
  RANGE BETWEEN INTERVAL '2 days' PRECEDING AND CURRENT ROW
)
-- All rows within 2 days (by calendar) of the current row.

Mengapa Perbezaan Ini Penting

Jika terdapat jurang dalam data, ROWS dan RANGE memberikan jawapan yang berbeza:

-- Days: 1, 3, 5 (no 2 or 4)
-- ROWS BETWEEN 2 PRECEDING AND CURRENT ROW for day 5: rows 1,3,5 = 3 days
-- RANGE BETWEEN INTERVAL '2 days' PRECEDING for day 5: only days 3,5 = 2 days

Bingkai GROUPS (PG 11+)

GROUPS mengira kumpulan rakan setara (nilai yang sama untuk ORDER BY), bukannya baris individu:

SUM(x) OVER (
  ORDER BY tier
  GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
)
-- "The current tier and the previous tier" — useful when ORDER BY has many ties.

Sempadan Bingkai

  • UNBOUNDED PRECEDING — baris pertama partisi
  • n PRECEDING
  • CURRENT ROW
  • n FOLLOWING
  • UNBOUNDED FOLLOWING — baris terakhir

Jumlah Berjalan

Jumlah dari awal hingga baris ini:

SUM(x) OVER (ORDER BY day ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
-- Same as the default frame.

Tetingkap Menjejak Ke Belakang

Purata menjejak ke belakang selama N hari:

AVG(revenue) OVER (
  ORDER BY day
  ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS avg_7d

Tetingkap Berpusat

Lihat ke kedua-dua arah:

AVG(revenue) OVER (
  ORDER BY day
  ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
) AS centred_7d

Kejutan LAST_VALUE

LAST_VALUE dengan bingkai lalai mengembalikan baris semasa, bukannya baris terakhir dalam partisi. Gunakan bingkai tidak terhad yang dinyatakan dengan jelas:

LAST_VALUE(name) OVER (
  PARTITION BY group ORDER BY day
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)

Klausa EXCLUDE (PG 11+)

Langkau baris tertentu dalam bingkai:

SUM(x) OVER (
  ORDER BY day
  ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
  EXCLUDE CURRENT ROW
)
-- All previous 6 days but not today.

Rumusan

Klausa bingkai memberikan kawalan tepat terhadap tetingkap.

  • ROWS — kiraan baris fizikal
  • RANGE — selang berdasarkan nilai
  • GROUPS — kumpulan rakan setara
  • Bingkai lalai mungkin memberikan hasil yang tidak dijangka — nyatakannya dengan jelas

Semakan Ringkas

Anda mempunyai hasil harian dengan hari yang tiada data. Bingkai yang manakah memberikan anda "semua baris dalam tempoh 7 hari kalendar sebelum masa sekarang"?

Percuma untuk bermula

Pelajari SQL dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
46
Pelajaran
183

Soalan Lazim

Adakah pelajaran “Klausa Bingkai: ROWS berbanding RANGE” percuma?

Ya — teks penuh “Klausa Bingkai: ROWS berbanding RANGE” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Klausa Bingkai: ROWS berbanding RANGE”?

Pilih antara klausa bingkai ROWS BETWEEN dan RANGE BETWEEN, serta fahami cara setiap satunya mengendalikan pendua dan jurang. Anda berlatih SQL Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan SQL Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Klausa Bingkai: ROWS berbanding RANGE” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Klausa Bingkai: ROWS berbanding RANGE
  2. Lag/Lead dengan Tetingkap Bingkai
  3. Pengumpulan Baldi dengan NTILE dan Cume_Dist
  4. Corak Pelaporan Dunia Sebenar
← Kembali ke SQL Academy