Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memilih 10 Rekod Teratas dalam Oracle dengan Cekap dengan Penapisan?

Bagaimana untuk Memilih 10 Rekod Teratas dalam Oracle dengan Cekap dengan Penapisan?

Barbara Streisand
Lepaskan: 2025-01-18 15:31:16
asal
501 orang telah melayarinya

How to Efficiently Select the Top 10 Records in Oracle with Filtering?

Tapis 10 rekod teratas dalam pangkalan data Oracle dengan cekap: teknologi subquery dan ROWNUM

Artikel ini bertujuan untuk menyelesaikan masalah pengisihan mengikut STORAGE_GB daripada jadual HISTORY, tidak termasuk baris yang memenuhi syarat tertentu dan akhirnya memilih hanya 10 rekod pertama. Menggunakan ROWNUM secara langsung untuk mengehadkan keputusan sebelum mengisih boleh menyebabkan masalah.

Penyelesaian menggunakan subkueri:

Penyelesaian adalah untuk mencipta subkueri yang memilih rekod yang diperlukan berdasarkan semua kriteria termasuk susunan isihan. Kemudian, gunakan subkueri ini sebagai sumber data dan gunakan ROWNUM untuk memilih 10 baris pertama.

<code class="language-sql">SELECT *
FROM (
  SELECT DISTINCT
    APP_ID,
    NAME,
    STORAGE_GB,
    HISTORY_CREATED,
    TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE
  FROM HISTORY
  WHERE
    STORAGE_GB IS NOT NULL
    AND APP_ID NOT IN (
      SELECT APP_ID
      FROM HISTORY
      WHERE TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') = '06.02.2009'
    )
  ORDER BY STORAGE_GB DESC
)
WHERE ROWNUM <= 10;</code>
Salin selepas log masuk

Gunakan EXISTS untuk pengoptimuman:

Untuk set data yang besar, ROWNUM Oracle tidak cekap. Pertimbangkan untuk menggunakan operator EXISTS dan bukannya NOT IN untuk meningkatkan prestasi.

<code class="language-sql">SELECT DISTINCT
  APP_ID,
  NAME,
  STORAGE_GB,
  HISTORY_CREATED,
  TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE
FROM HISTORY
WHERE
  STORAGE_GB IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
    FROM HISTORY
    WHERE
      APP_ID = APP_ID
      AND TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') = '06.02.2009'
  )
ORDER BY STORAGE_GB DESC
FETCH FIRST 10 ROWS ONLY;</code>
Salin selepas log masuk

(Nota: LIMIT 10 tidak disokong secara langsung dalam Oracle, FETCH FIRST 10 ROWS ONLY harus digunakan sebaliknya)

Melalui kaedah di atas, anda boleh menapis dengan cekap 10 rekod teratas yang memenuhi syarat daripada pangkalan data Oracle. Memilih versi menggunakan EXISTS boleh meningkatkan kecekapan pertanyaan dengan ketara, terutamanya apabila memproses set data yang besar.

Atas ialah kandungan terperinci Bagaimana untuk Memilih 10 Rekod Teratas dalam Oracle dengan Cekap dengan Penapisan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan