PostgreSQL의 DISTINCT ON 절 불일치 오류 문제 해결
PostgreSQL의 DISTINCT ON
절에는 고유 열과 정확하게 일치하는 ORDER BY
식이 필요합니다. 다른 표현식으로 쿼리를 시도하면 오류가 발생합니다. 단순히 address_id
절의 첫 번째 요소로 ORDER BY
을 추가하면 오류가 해결되지만 의도한 결과가 반환되지 않을 수 있습니다.
ORDER BY
절 내의 DISTINCT ON
을 변경하지 않고 올바른 데이터를 검색할 수 있는 대체 방법은 다음과 같습니다.
방법 1: 그룹당 최대 N개 접근 방식(DBMS 불가지론)
이 방법은 하위 쿼리를 사용하여 각 purchased_at
에 대한 최대 address_id
를 찾은 다음 원래 테이블에 다시 조인하여 전체 행을 검색합니다.
<code class="language-sql">SELECT t1.* FROM purchases t1 JOIN ( SELECT address_id, max(purchased_at) as max_purchased_at FROM purchases WHERE product_id = 1 GROUP BY address_id ) t2 ON t1.address_id = t2.address_id AND t1.purchased_at = t2.max_purchased_at ORDER BY t1.purchased_at DESC;</code>
방법 2: PostgreSQL 전용 솔루션
이 접근 방식은 내부 쿼리에서 DISTINCT ON
을 사용하여 각 address_id
에 대해 원하는 행을 선택한 다음 외부 쿼리에서 필요에 따라 최종 결과를 정렬하는 중첩 쿼리를 활용합니다.
<code class="language-sql">SELECT * FROM ( SELECT DISTINCT ON (address_id) * FROM purchases WHERE product_id = 1 ORDER BY address_id, purchased_at DESC ) t ORDER BY purchased_at DESC;</code>
이러한 접근 방식은 DISTINCT ON
절의 ORDER BY
표현식을 타협할 필요 없이 원하는 정렬 순서를 유지하면서 필요한 데이터를 검색할 수 있는 유연한 솔루션을 제공합니다.
위 내용은 PostgreSQL의 DISTINCT ON 불일치 ORDER BY 절 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!