SQL 조건부 집계
조건부 집계는 하나의 그룹화된 쿼리로 여러 관련 질문에 답합니다. 성공적인 요청에 대해 테이블을 한 번 스캔하고 실패한 요청에 대해 다시 스캔하는 대신 CASE 표현식 안에 조건을 넣고 두 결과를 함께 집계합니다. 이 패턴은 오류율, 전환율, 재시도율, 캐시 적중률 및 분모가 계속 표시되어야 하는 모든 결과에 유용합니다.
결과 계산 및 분모 보호
SELECT
route_template,
COUNT(*) AS requests,
SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END) AS server_errors,
100.0 * SUM(CASE WHEN status_code >= 500 THEN 1 ELSE 0 END)
/ NULLIF(COUNT(*), 0) AS server_error_rate_pct
FROM api_request_events
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
GROUP BY route_template
HAVING COUNT(*) >= 20
ORDER BY server_error_rate_pct DESC;
총계, 조건부 개수, 백분율은 이야기의 다른 부분을 알려줍니다. 총계는 표본 크기를 설정합니다. 개수는 절대적인 영향을 보여줍니다. 이 비율은 교통량이 서로 다른 경로를 비교할 수 있게 해줍니다. NULLIF는 분모가 0인 비율을 보호하는 반면 100.0는 결과를 백분율 산술로 유지합니다.
의도적으로 인구를 선택하십시오
WHERE 절은 그룹화 전 모집단을 정의합니다. CASE 표현식은 해당 모집단의 어떤 행이 결과와 일치하는지 정의합니다. 이러한 구별은 중요합니다. WHERE에서 오류를 제외하면 오류율이 불가능해지고 분모에 상태 확인을 포함하면 고객 트래픽이 실제보다 더 건강해 보일 수 있습니다.
모든 행이 하나의 상태 버킷에 있어야 하는 경우 상호 배타적 조건을 사용합니다. 행이 둘 이상의 레이블을 합법적으로 충족할 수 있는 경우 독립 조건을 사용합니다. 버킷의 합계가 합계와 같을 것으로 예상되는지 항상 확인하세요.
요금에는 운영 컨텍스트가 필요합니다.
두 이벤트의 높은 비율은 200만 이벤트의 동일한 비율과 거의 동일하지 않습니다. 결과에 개수를 유지하고, 검토된 최소 볼륨 규칙을 사용하고, 전체 기간을 비교하세요. Null 상태 값, 재시도, 중복 전달 및 지연 이벤트도 명시적으로 처리해야 합니다.
테스트된 API 오류율 레시피, 트랜잭션 롤백 레시피 또는 변환율 가이드로 시작하세요. 지원되는 다른 구문은 DataFusion SQL 참조를 참조하세요.