> 데이터 베이스 > MySQL 튜토리얼 > MySQL에서 Postgresql의 DISTINCT ON 기능을 어떻게 달성합니까?

MySQL에서 Postgresql의 DISTINCT ON 기능을 어떻게 달성합니까?

Patricia Arquette
풀어 주다: 2024-11-10 22:56:03
원래의
236명이 탐색했습니다.

How to Achieve the Functionality of Postgresql's DISTINCT ON in MySQL?

Postgresql의 DISTINCT ON 쿼리를 MySQL로 변환

Postgresql에서 MySQL로 마이그레이션하려면 기존 쿼리를 조정해야 하는 경우가 많습니다. 이러한 쿼리 유형 중 하나는 여러 열을 고려하면서 고유한 행을 검색하는 DISTINCT ON 쿼리입니다. MySQL에는 이에 상응하는 기능이 없지만 유사한 기능을 달성하기 위한 접근 방식이 있습니다.

Postgresql의 SELECT DISTINCT ON

Postgresql의 SELECT DISTINCT ON 쿼리는 지정된 열을 기반으로 고유한 행을 검색합니다. 예를 들면 다음과 같습니다.

SELECT DISTINCT ON (col1, col2, col3) col4, col5
FROM tablename
로그인 후 복사

이 쿼리는 (col1, col2, col3)의 각 고유 조합에 대해 하나의 행만 반환하고 처음 발견된 col4 및 col5 값을 유지합니다.

MySQL Group By 확장

MySQL은 GROUP BY 절을 확장하여 다음 항목을 선택할 수 있습니다. 집계되지 않은 열. 그러나 각 그룹에 대해 반환되는 특정 행은 불확실합니다. 이는

SELECT col4, col5
FROM tablename
GROUP BY col1, col2, col3
로그인 후 복사

과 같은 쿼리가 행 선택 측면에서 Postgresql의 DISTINCT ON 쿼리와 동일하다는 것을 의미합니다. 그러나 반환된 행은 예측할 수 없습니다.

MySQL에 적응

예측 가능성을 보장하려면 질서 있는 접근 방식이 필요합니다. ORDER BY와 함께 하위 쿼리를 사용하는 매력에도 불구하고 MySQL의 최적화 프로그램은 이를 존중하지 않을 수 있습니다.

더 신뢰할 수 있는 접근 방식은 다음과 같습니다.

SELECT t1.col4, t1.col5
FROM tablename t1 INNER JOIN (
  SELECT col1, col2, col3, MIN(col4) as m_col4
  FROM tablename
  GROUP BY col1, col2, col3
) s
     ON t1.col1=s.col1
        AND t1.col2=s.col2
        AND t1.col3=s.col3
        AND t1.col4=s.m_col4
GROUP BY
  t1.col1, t1.col2, t1.col3, t1.col4
로그인 후 복사

이 쿼리는 DISTINCT ON을 만족하는 첫 번째 발견된 행을 찾습니다. 상관 하위 쿼리를 사용하여 각각에 대한 최소 col4 값을 검색하여 Postgresql의 기준 group.

결론

Postgresql의 DISTINCT ON 쿼리에는 MySQL에 직접 대응되는 쿼리가 없지만 해결 방법이 있습니다. 접근 방식 선택은 특정 쿼리와 원하는 복잡성 수준에 따라 다릅니다.

위 내용은 MySQL에서 Postgresql의 DISTINCT ON 기능을 어떻게 달성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿