> 데이터 베이스 > MySQL 튜토리얼 > MySQL에서 Postgresql의 SELECT DISTINCT ON을 복제하는 방법은 무엇입니까?

MySQL에서 Postgresql의 SELECT DISTINCT ON을 복제하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-08 16:59:02
원래의
1105명이 탐색했습니다.

How to Replicate Postgresql's SELECT DISTINCT ON in MySQL?

Postgresql의 SELECT DISTINCT ON을 MySQL로 변환

Postgresql에서 MySQL로 마이그레이션할 때 Postgresql의 SELECT DISTINCT를 활용하여 쿼리를 변환해야 할 수도 있습니다. MySQL에 대한 ON 문

Postgresql의 SELECT DISTINCT ON

Postgresql에서 SELECT DISTINCT ON은 지정된 열의 고유한 조합을 기반으로 중복 행을 제거하는 데 사용됩니다. 일치하는 모든 행을 제거하고 각각의 개별 조합에 대해 "첫 번째" 행만 유지합니다.

GROUP BY에 대한 MySQL 확장

MySQL에는 SELECT와 정확히 일치하는 행이 없습니다. 구별됨. 대신, GROUP BY 절에 이름이 지정되지 않은 경우에도 집계되지 않은 열을 선택할 수 있도록 하는 GROUP BY 확장을 사용합니다. 그러나 각 그룹에서 어떤 값을 선택하는지는 예측할 수 없습니다. 따라서 잠재적으로 MySQL에서 GROUP BY를 사용하여 유사한 효과를 얻을 수 있습니다.

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

이 쿼리는 각 (col1, col2, col3) 조합에 대해 "첫 번째" 행을 반환하지만 특정 순서는 이 행은 확정되지 않았습니다.

행 순서 유지

다음으로 반환되는 행의 순서를 지정하려면 하위 쿼리를 사용할 수 있습니다.

SELECT col4, col5
FROM (
  SELECT col1, col2, col3, col4, col5
  FROM tablename
  ORDER BY col1, col2, col3, col4
) s
GROUP BY col1, col2, col3;
로그인 후 복사

이 접근 방식이 논리적으로 보이지만 MySQL은 여전히 ​​col4 및 col5에 대해 임의의 값을 선택할 수 있는 재량권을 갖습니다. 예상되는 행 순서를 보장하려면 더 복잡한 쿼리가 필요합니다.

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;
로그인 후 복사

결론

Postgresql의 SELECT DISTINCT ON을 MySQL로 직접 변환할 수는 없지만, GROUP BY 및 하위 쿼리를 사용하는 해결 방법은 원하는 기능을 제공합니다. 그러나 결과 MySQL 쿼리는 Postgresql 쿼리보다 더 복잡할 수 있습니다.

위 내용은 MySQL에서 Postgresql의 SELECT DISTINCT ON을 복제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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