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

Perbedaan Oracle SQL:COUNT(*) vs Kumpulan Hasil Aktual

SELECT
    a.e_id,
    coalesce(attempts, 0) attempts,
    coalesce(successes, 0) successes,
    coalesce(failures, 0) failures
FROM
    (
        SELECT e_id, count(*) as attempts FROM e_table
        WHERE e_comment LIKE '%attempt%' AND e_date BETWEEN '23-MAY-2016' AND '26-MAY-2016'
        GROUP BY e_id
    ) a
    full outer join
    (
        SELECT e_id, count(*) as successes FROM e_table
        WHERE e_comment LIKE '%success%' AND e_date BETWEEN '23-MAY-2016' AND '26-MAY-2016'
        GROUP BY e_id
    ) s
        on s.e_id = a.e_id
    full outer join
    (
        SELECT e_id, count(*) as failures FROM e_table
        WHERE e_comment LIKE '%failure%' AND e_date BETWEEN '23-MAY-2016' AND '26-MAY-2016'
        GROUP BY e_id
    ) f
        on f.e_id = coalesce(a.e_id, s.e_id)
WHERE
    coalesce(attempts, 0) <> coalesce(successes, 0) + coalesce(failures, 0)

Saya mengubah ke gabungan luar penuh sehingga Anda dapat memverifikasi bahwa tidak ada keberhasilan dan/atau kegagalan tanpa upaya pencocokan. Ini akan memungkinkan Anda menemukan e_id s di mana ada sesuatu yang salah dalam logging. Seharusnya lebih mudah untuk mulai berurusan dengan angka yang lebih baik dan bukan hanya daftar nilai id.

Yang lain telah menunjukkan potensi untuk beberapa upaya pada id yang sama tetapi apakah mungkin bahwa keberhasilan dan kegagalan keduanya dapat direkam dengan cara yang sama seperti yang dikatakan dalam beberapa jenis skenario coba lagi? Kami tidak tahu seperti apa komentar lengkapnya. Sebagai penjelasan yang mungkin, apakah satu komentar dapat berisi lebih dari satu kata "usaha", "berhasil", "gagal"?

Ini hal lain yang perlu dipertimbangkan: Apakah Anda yakin bahwa semua peristiwa sukses dan gagal Anda akan jatuh dalam jendela tanggal yang sama? Dengan kata lain, apakah ada penundaan setelah percobaan? Mungkin tidak akan terlalu lama jika ini terjadi sekitar tengah malam. Anda mungkin ingin memperluas rentang keberhasilan dan kegagalan cukup untuk mengimbangi ini (dan ubah ke gabungan luar kiri.)

Catatan: Kondisi di where klausa telah dimodifikasi untuk memungkinkan beberapa upaya (seperti yang tercantum dalam komentar) dan sekarang hanya mencari keseimbangan dalam jumlah upaya vs. keberhasilan dan kegagalan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan mencetak variabel REFCURSOR sebagai parameter OUT dalam prosedur di Oracle 11g

  2. Oracle ERROR:ORA-00900:pernyataan SQL tidak valid

  3. Apa perbedaan antara Tampilan dan Tampilan Terwujud di Oracle?

  4. Bagaimana Anda bisa tahu jika suatu nilai bukan numerik di Oracle?

  5. Memahami perbedaan antara Tabel dan API Transaksi