Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Sự khác biệt trong Oracle SQL:COUNT (*) so với Bộ kết quả thực 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)

Tôi đã thay đổi thành các phép nối bên ngoài đầy đủ để bạn có thể xác minh rằng không có thành công và / hoặc thất bại nào mà không có bất kỳ nỗ lực đối sánh nào. Điều này sẽ cho phép bạn tìm thấy e_id s nơi có điều gì đó không ổn trong quá trình ghi nhật ký. Sẽ dễ dàng hơn khi bắt đầu xử lý các số nhỏ hơn chứ không chỉ là danh sách các giá trị id.

Những người khác đã chỉ ra khả năng xảy ra nhiều lần thử trên cùng một id nhưng liệu có thể hình dung được rằng cả thành công và thất bại đều có thể được ghi lại theo cùng một cách như đã nói trong một số loại kịch bản thử lại không? Chúng tôi không biết các bình luận đầy đủ trông như thế nào. Như một lời giải thích khả thi, một nhận xét có thể chứa nhiều hơn một trong các từ "cố gắng", "thành công", "thất bại" không?

Đây là một số điều khác cần xem xét: Bạn có chắc chắn rằng tất cả các sự kiện thành công và thất bại của bạn sẽ diễn ra trong cùng một khoảng thời gian không? Nói cách khác, có sự chậm trễ nào sau nỗ lực này không? Có thể không lâu lắm nếu điều này xảy ra vào khoảng nửa đêm. Bạn có thể muốn mở rộng phạm vi thành công và thất bại đủ để bù đắp cho điều này (và thay đổi thành các phép nối ngoài cùng bên trái.)

Lưu ý: Điều kiện ở where điều khoản đã được sửa đổi để cho phép thực hiện nhiều lần thử (như đã lưu ý trong nhận xét) và giờ đây chỉ cần tìm kiếm sự cân bằng giữa số lần thử so với thành công và thất bại.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng GUID của Oracle () - ID được tạo trong Grails / Hibernate

  2. Cột được xác định chưa rõ ràng

  3. Làm thế nào để chỉ liệt kê các bảng tôi đã tạo trong Oracle SQL?

  4. oracle pl / sql DBMS_LOCK lỗi

  5. Rolling thời hạn 90 ngày trong SQL Oracle