sql >> Database teknologi >  >> RDS >> Oracle

Oracle SQL-uoverensstemmelse:COUNT(*) vs. faktisk resultatsæt

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)

Jeg ændrede til fuld ydre joinforbindelse, så du kan verificere, at der ikke er nogen succeser og/eller fiaskoer uden et matchende forsøg. Dette skulle give dig mulighed for at finde e_id hvor noget går galt i logningen. Det burde være nemmere at begynde at håndtere finere tal og ikke kun lister over id-værdier.

Andre har påpeget potentialet for flere forsøg på det samme id, men er det tænkeligt, at en succes og fiasko begge kunne optages på samme måde som i en slags genforsøgsscenarie? Vi ved ikke, hvordan de fulde kommentarer ser ud. Kan en enkelt kommentar som en mulig forklaring indeholde mere end ét af ordene "forsøg", "succes", "mislykket"?

Her er noget andet at overveje: Er du sikker på, at alle dine succes- og fiaskobegivenheder falder inden for samme datovindue? Med andre ord, er der en vis forsinkelse efter forsøget? Det behøver måske ikke være særlig lang tid, hvis dette sker omkring midnat. Du ønsker måske at udvide succes- og fiaskointervallerne nok til at kompensere for dette (og skifte til venstre ydre sammenføjninger).

Bemærk: Tilstand i where klausulen er blevet ændret for at tillade flere forsøg (som nævnt i kommentarerne) og søger nu bare efter en balance i antallet af forsøg kontra succeser og fiaskoer.



  1. MySQL fuldtekstsøgning med utf8 (persisk/arabisk)

  2. Hvordan danner man en korrekt MySQL-forbindelsesstreng?

  3. MySQL-databasen er ødelagt

  4. MySQL:grupper efter dato RANGE?