Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle SQL несъответствие:COUNT(*) спрямо действителен набор от резултати

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)

Промених на пълни външни присъединявания, за да можете да проверите дали няма успехи и/или неуспехи без опит за съвпадение. Това трябва да ви позволи да намерите e_id къде нещо се обърка в регистрирането. Би трябвало да е по-лесно да започнете да работите с по-фини числа, а не само със списъци на id стойности.

Други посочиха потенциала за множество опити за един и същ идентификатор, но възможно ли е успехът и неуспехът да бъдат записани по същия начин, както да кажем в някакъв сценарий за повторен опит? Не знаем как изглеждат пълните коментари. Като възможно обяснение, може ли един коментар да съдържа повече от една от думите „опит“, „успех“, „провал“?

Ето още нещо, което трябва да имате предвид: Сигурни ли сте, че всички ваши успехи и неуспехи ще попаднат в един и същи прозорец от дати? С други думи, има ли известно забавяне след опита? Може да не е много дълго, ако това се случи около полунощ. Може да искате да разширите диапазоните на успех и неуспех достатъчно, за да компенсирате това (и да промените към леви външни съединения.)

Забележка: Условие в where клаузата е променена, за да позволи множество опити (както е отбелязано в коментарите) и сега просто търси баланс в броя на опитите спрямо успехите и неуспехите.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Промяна на разделителя на функцията WM_CONCAT на Oracle 11gR2

  2. Извикване на pl/sql функция с mybatis 3

  3. Правилният начин за предоставяне на достъп на потребителите до допълнителни схеми в Oracle

  4. Oracle Database 21c

  5. ГРЕШКА на ред 191:ORA-01489:резултатът от конкатенацията на низ е твърде дълъг