Agregat FungsiFungsi agregat mengembalikan baris hasil tunggal berdasarkan kelompok baris, bukan pada baris tunggal. Fungsi Agregat dapat muncul dalam daftar pilih dan ORDER BY dan HAVING klausa. Mereka umumnya digunakan dengan GROUP BY klausa dalam SELECT pernyataan, di mana Oracle Database membagi baris tabel tanya atau melihat ke dalam kelompok. Dalam query berisi GROUP BY klausa, unsur-unsur dari daftar pilih dapat menjadi fungsi agregat, GROUP BY ekspresi, konstanta, atau ekspresi yang melibatkan salah satunya. Oracle menerapkan fungsi agregat untuk setiap kelompok baris dan mengembalikan satu baris hasil tunggal untuk masing-masing kelompok.
Jika Anda menghilangkan GROUP BY klausa, maka Oracle berlaku fungsi agregat dalam daftar pilih untuk semua baris dalam tabel tanya atau melihat. Anda menggunakan fungsi agregat dalam HAVING klausa untuk menghilangkan kelompok dari output berdasarkan hasil dari fungsi agregat, bukan pada nilai-nilai individu baris dari tabel tanya atau melihat.
Banyak (tetapi tidak semua) fungsi agregat yang mengambil satu argumen menerima klausul ini:
DISTINCT dan UNIQUE , yang identik, menyebabkan fungsi agregat untuk mempertimbangkan hanya nilai-nilai yang berbeda dari ekspresi argumen.Diagram sintaks untuk fungsi agregat dalam bab ini menggunakan kata kunci DISTINCT untuk kesederhanaan.
ALL menyebabkan fungsi agregat untuk mempertimbangkan semua nilai, termasuk semua duplikat.Sebagai contoh, DISTINCT rata-rata 1, 1, 1, dan 3 adalah 2. The ALL rata-rata adalah 1,5. Jika Anda menentukan tidak, maka default adalah ALL .
Beberapa fungsi agregat memungkinkan windowing_clause , yang merupakan bagian dari sintaks analisis fungsi. Mengacu windowing_clause informasi tentang klausul ini. Dalam daftar fungsi agregat pada akhir bagian ini, fungsi-fungsi yang memungkinkan windowing_clause diikuti oleh tanda bintang (*)Semua fungsi agregat kecuali COUNT (*), GROUPING , dan GROUPING_ID mengabaikan nulls. Anda dapat menggunakan NVL fungsi dalam argumen ke fungsi agregat untuk menggantikan nilai null. COUNT dan REGR_COUNT pernah kembali nol, tapi kembali salah satu nomor atau nol. Untuk semua fungsi agregat tersisa, jika set data yang tidak mengandung baris, atau hanya berisi baris dengan nulls sebagai argumen untuk fungsi agregat, maka fungsi kembali nol.
Fungsi agregat MIN , MAX , SUM , AVG , COUNT , VARIANCE , dan STDDEV , jika diikuti oleh KEEP kata kunci, dapat digunakan bersama dengan FIRST atau LASTfungsi untuk beroperasi pada seperangkat nilai-nilai dari satu set baris yang rank sebagai FIRST atau LAST sehubungan dengan spesifikasi yang diberikan penyortiran. Mengacu PERTAMA untuk informasi lebih lanjut.Anda dapat sarang fungsi agregat. Misalnya, contoh berikut menghitung rata-rata gaji maksimal dari semua departemen dalam skema sampel hr :
SELECT AVG (MAX (gaji)) DARI karyawan GROUP BY department_id; AVG (MAX (GAJI)) ---------------- 10926.3333
Perhitungan ini mengevaluasi agregat batin ( MAX ( salary )) untuk setiap kelompok ditentukan oleh GROUP BY klausa ( department_id ), dan agregat hasil lagi.
HAVING
Klausul Digunakan dengan GROUP BY Ekstensi
Klausa HAVING laporan SELECT tidak terpengaruh oleh penggunaan GROUP BY. Perhatikan bahwa kondisi yang ditentukan dalam klausa HAVING berlaku untuk kedua baris subtotal dan non-subtotal dari hasil set. Dalam beberapa kasus query mungkin perlu untuk mengecualikan baris subtotal atau non-subtotal baris dari klausa HAVING. Hal ini dapat dicapai dengan menggunakan Pengelompokan atau fungsi GROUPING_ID bersama-sama dengan klausa HAVING. Lihat Contoh 20-8 dan pernyataan terkait SQL untuk contoh.
ORDER BY
Clause Digunakan dengan GROUP BY Ekstensi
Dalam banyak kasus, query perlu memesan baris dengan cara tertentu, dan ini dilakukan dengan klausa ORDER BY. ORDER BY klausa dari pernyataan SELECT tidak terpengaruh oleh penggunaan GROUP BY, karena ORDER BY klausa diterapkan setelah GROUP BY perhitungan selesai.
Perhatikan bahwa ORDER BY spesifikasi tidak membuat perbedaan antara baris agregat dan non-agregat hasil set. Misalnya, Anda mungkin ingin daftar angka penjualan dalam rangka menurun, tetapi masih memiliki subtotal pada akhir masing-masing kelompok. Cukup memesan angka penjualan dalam urutan descending tidak akan cukup, karena itu akan menempatkan subtotal (nilai terbesar) pada awal masing-masing kelompok. Oleh karena itu, adalah penting bahwa kolom dalam klausa ORDER BY termasuk kolom yang membedakan agregat dari non-agregat kolom. Persyaratan ini berarti bahwa query menggunakan ORDER BY bersama dengan ekstensi agregasi untuk GROUP BY umumnya akan perlu menggunakan satu atau lebih dari fungsi PENGELOMPOKAN.
x