SQL에서 WITH TIES 옵션은 ORDER BY와 행 수 제한 구문(TOP 또는 FETCH FIRST ... ROWS ONLY)과 함께 사용됩니다. 이 옵션은 엄격히 N개의 첫 번째 행만 반환하는 것이 아니라, 정렬 필드의 값이 마지막(N번째) 행과 일치하는 모든 행도 함께 반환할 수 있습니다.
필요한 경우: 분석, 순위, 리더보드에서 동점이나 동일 점수를 가진 그룹을 포함하는 것이 중요할 때.
예시 (SQL Server):
SELECT TOP 3 WITH TIES * FROM Sales ORDER BY Amount DESC;
3위와 4위의 판매 금액이 동일하다면 두 행 모두 반환됩니다.
PostgreSQL에서:
SELECT * FROM Sales ORDER BY Amount DESC FETCH FIRST 3 ROWS WITH TIES;
중요: ORDER BY와 함께 작동해야 하며, 그렇지 않으면 결과가 예측 불가능합니다.
단순히
TOP N/LIMIT와WITH TIES의 차이는 무엇인가요?
자주 발생하는 잘못된 답변: "WITH TIES는 단순히 행을 제한하며, 동의어입니다".
정확한 답변:
TOP N/LIMIT — 정확히 N개의 행을 반환하며, 다음 행이 동일한 정렬 값을 가질지라도.WITH TIES — 마지막(N번째) 행의 정렬 필드와 일치하는 모든 행을 추가합니다.예시:
-- 상위 2개의 결과를 선택하지만 동점이 있을 경우 그들도 얻습니다: SELECT TOP 2 WITH TIES Name, Score FROM Results ORDER BY Score DESC;
사례
프로젝트: 학생 순위 대회. 오류: 단순히
LIMIT 3을 사용하여 여러 학생이 동일한 점수를 가졌음에도 불구하고 승자 목록에서 누락되어 실제 수상자가 잘못 "잘린" 경우.
사례
프로젝트: E-commerce 분석. 오류: 상위 5개의 인기 상품을 보여주고 싶었지만 판매 수치가 동일한 SKU의 경우 처음 5개만 보여주고, 나중에 감사에서 일부 히트가 보고서에 포함되지 않았음을 발견.
사례
프로젝트: 지점 판매 보고서. 오류: 클라이언트는 동일한 결과를 가진 모든 리더를 보고 싶어했지만, 개발자가 WITH TIES를 알지 못해 결과가 부정확했으며, 클라이언트가 데이터 품질에 불만을 제기했습니다.