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.