메인 콘텐츠로 건너뛰기

질문

두 쿼리가 동일한 결과 세트를 반환하는지 어떻게 확인할 수 있습니까?

답변

다음과 같이 진행할 수 있습니다:
WITH
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            -- 쿼리 1을 여기에 작성하세요
            -- SELECT ...
        )
    ) AS q1_resultset_hash,
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            -- 쿼리 2를 여기에 작성하세요
            -- SELECT ...
        )
    ) AS q2_resultset_hash
SELECT equals(q1_resultset_hash,q2_resultset_hash) as Q1_equals_Q2
이 예시에서는 CTE를 사용해 두 쿼리에서 각 행의 cityHash 값의 합계를 계산하며, 두 결과 집합이 동일하면 1을 반환합니다. 일련의 정수 데이터와 Pretty 형식을 사용한 예시는 다음과 같습니다:
WITH
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            SELECT *
            FROM numbers(10)
            ORDER BY number DESC
        )
    ) AS q1_resultset_hash,
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            SELECT *
            FROM numbers(10)
            ORDER BY number ASC
        )
    ) AS q2_resultset_hash
SELECT q1_resultset_hash = q2_resultset_hash AS Q1_equals_Q2
FORMAT Pretty
다음이 반환됩니다:
┏━━━━━━━━━━━━━━┓
┃ Q1_equals_Q2 ┃
┡━━━━━━━━━━━━━━┩
│            1 │
└──────────────┘
이는 여러 상황에서 유용할 수 있지만, 모든 타입의 결과 세트 동등성을 검증하는 만능 해결책으로 볼 수는 없으며, 사용할 때 몇 가지 주의사항이 있습니다. 예를 들어 어떤 행에라도 NULL 값이 포함되어 있으면 위 방식은 실패합니다.
마지막 수정일 2026년 6월 10일