Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

sql dipesan dengan klausa pilih dalam dan kelompokkan dengan rollup

Anda bisa melakukan sesuatu seperti ini. Saya tidak memiliki data input Anda, jadi saya menggunakan SCOTT.EMP sebagai gantinya.

Perhatikan beberapa hal. Saya mengelompokkan berdasarkan JOB , dan saya menggunakan GROUPING(JOB) keduanya di SELECT (untuk menambahkan label TOTAL untuk baris ringkasan) dan di ORDER BY . Karena saya menggunakan kembali nama kolom JOB di SELECT (untuk kolom keluaran), di ORDER BY Saya harus berhati-hati untuk memenuhi syarat nama kolom JOB (untuk memperjelas saya mengacu pada kolom tabel input, bukan ke kolom di SELECT - yang akan menjadi default jika nama kolom di ORDER BY tidak memenuhi syarat). Kebutuhan untuk memenuhi syarat nama kolom di ORDER BY , kemudian, memaksa saya untuk membuat alias tabel di FROM klausa (jika tidak, saya harus membawa nama tabel lengkap di mana-mana).

Menggunakan GROUPING fungsi di SELECT (bukan NVL ) sangat penting jika JOB bisa null . Anda tidak ingin grup untuk null pekerjaan yang akan diberi label TOTAL - Anda hanya menginginkan itu untuk baris rollup. Poin ini bahkan membingungkan banyak programmer yang sangat mahir.

Saya tunjukkan bagaimana Anda dapat "secara manual" memutuskan pesanan:PRESIDENT pertama, lalu MANAGER , dan kemudian semua pekerjaan lain (diurutkan berdasarkan abjad). Jika Anda memiliki urutan prioritas yang disimpan di suatu tempat, misalnya dalam sebuah tabel, Anda dapat bergabung ke tabel itu dan menggunakan kolom pemesanan alih-alih CASE "manual" ekspresi dalam kueri saya.

select case grouping(job) when 0 then job else 'TOTAL' end as job
     , sum(sal) as total_salary
from   scott.emp e
group  by rollup(job)
order  by grouping(e.job)       -- to get the total in the last row
        , case e.job when 'PRESIDENT' then 1 when 'MANAGER' then 2 end
        , e.job
;

JOB       TOTAL_SALARY
--------- ------------
PRESIDENT         5000
MANAGER           8275
ANALYST           6000
CLERK             4150
SALESMAN          5600
TOTAL            29025



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle BI:Pilih semua catatan dari minggu lalu

  2. Cara membuat sinonim publik dengan benar

  3. Cara yang lebih efisien untuk menemukan karyawan dengan cakupan antara dua tanggal

  4. Oracle 10g:Ekstrak data (pilih) dari XML (Jenis CLOB)

  5. Permintaan Oracle untuk Kecualikan akhir pekan, dan pukul 18:00 hingga 21:00