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)
Jag ändrade till fullständiga yttre anslutningar så att du kan verifiera att det inte finns några framgångar och/eller misslyckanden utan något matchningsförsök. Detta bör låta dig hitta e_id
s där något går fel i loggningen. Det borde vara lättare att börja hantera finare siffror och inte bara listor över id-värden.
Andra har påpekat potentialen för flera försök på samma id, men är det tänkbart att en framgång och ett misslyckande båda kan registreras på samma sätt som säg i något slags återförsöksscenario? Vi vet inte hur de fullständiga kommentarerna ser ut. Som en möjlig förklaring, kan en enskild kommentar innehålla mer än ett av orden "försök", "framgång", "misslyckande"?
Här är något annat att tänka på: Är du säker på att alla dina framgångar och misslyckanden kommer att falla inom samma datumfönster? Med andra ord, finns det någon fördröjning efter försöket? Det kanske inte behöver vara särskilt lång tid om detta händer runt midnatt. Du kanske vill bredda framgångs- och misslyckandeintervallen tillräckligt mycket för att kompensera för detta (och byta till vänster yttre skarvar.)
Obs! Tillstånd i where
klausulen har ändrats för att tillåta flera försök (som noterats i kommentarerna) och letar nu bara efter en balans i antalet försök kontra framgångar och misslyckanden.