MySQL GROUP BY: 표준의 편차
MySQL의 GROUP BY 구현을 통해 집계되지 않은 열을 포함할 수 있습니다. 그룹화 기준에 포함되지 않은 경우에도 SELECT 목록에 있습니다. 이 동작은 해당 쿼리에서 그룹화되지 않은 열을 선택하는 것을 금지하는 ANSI SQL 표준과 다릅니다.
이러한 불일치는 기능적 종속성 개념에서 발생합니다. MySQL에서 그룹화되지 않은 열이 그룹화 열에 기능적으로 종속되는 경우 MySQL은 해당 열에 대해 자동으로 단일 값을 선택하고 반환합니다. 그러나 기능 종속성이 적용되지 않으면 이러한 쿼리가 모호한 결과를 초래할 수 있다는 점에 유의하는 것이 중요합니다.
예를 들어 다음 쿼리는 ANSI SQL에서 유효하지 않습니다.
SELECT AVG(table1.col1), table1.personID, persons.col4 FROM table1 JOIN persons ON (table1.personID = persons.id) GROUP BY table1.personID;
MySQL에서는 person.col4가 조인을 통해 table1.personID에 기능적으로 종속되기 때문에 이 쿼리가 허용됩니다. 그러나 여러 사람이 동일한 personID를 갖는 경우 person.col4의 결과는 임의적일 수 있습니다.
이러한 모호성을 방지하기 위해 MySQL은 ANSI 표준에 따라 더 엄격한 그룹화 규칙을 적용하는 ONLY_FULL_GROUP_BY SQL 모드를 제공합니다. 기본적으로 이 모드는 활성화되어 있지 않지만 쿼리가 표준 동작을 준수하도록 활성화할 수 있습니다.
SQLite는 GROUP BY 쿼리에서 집계되지 않은 열도 허용하지만 마지막 값을 선택합니다. 임의의 그룹이 아닌 그룹에서. 이 동작은 향후 버전에서 변경될 수 있으므로 의존해서는 안 됩니다. 모호성을 방지하려면 모호하지 않고 결정적이 되도록 쿼리를 다시 작성하는 것이 좋습니다.
위 내용은 MySQL은 GROUP BY 절에서 집계되지 않은 열을 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!