sql >> Databáze >  >> RDS >> Oracle

Nesrovnalosti Oracle SQL:COUNT(*) vs. skutečná sada výsledků

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)

Změnil jsem na úplné vnější spojení, takže si můžete ověřit, že neexistují žádné úspěchy a/nebo selhání bez pokusu o shodu. To by vám mělo umožnit najít e_id kde se v protokolování něco pokazilo. Mělo by být snazší začít pracovat s jemnějšími čísly a ne pouze s výpisy hodnot id.

Jiní poukázali na potenciál pro více pokusů se stejným ID, ale je možné, že by úspěch i neúspěch mohly být zaznamenány stejným způsobem, jako se říká v nějakém scénáři opakování? Nevíme, jak vypadají úplné komentáře. Může jeden komentář jako možné vysvětlení obsahovat více než jedno ze slov „pokus“, „úspěch“, „neúspěch“?

Zde je ještě něco, co je třeba zvážit: Jste si jisti, že všechny vaše úspěchy a neúspěchy budou spadat do stejného časového okna? Jinými slovy, je po pokusu nějaké zpoždění? Pokud se to stane kolem půlnoci, nemusí to trvat příliš dlouho. Možná budete chtít dostatečně rozšířit rozsahy úspěchů a neúspěchů, abyste to kompenzovali (a změnit na levé vnější spojení.)

Poznámka: Podmínka v where klauzule byla upravena tak, aby umožňovala více pokusů (jak je uvedeno v komentářích) a nyní pouze hledá rovnováhu mezi počtem pokusů vs. úspěchy a neúspěchy.



  1. odstranit vše z tabulky

  2. Tomcat 9 s Apache DBCP + Spring 5 + Oracle 12c + SqlArrayValue

  3. Kde je pracovní složka Bea Weblogic?

  4. Jak vzít zálohu databáze MySQL a vložit ji do Amazon s3 každou noc pomocí karty Cron?