MySQL에서는 다음과 같은 뷰가 허용되는 시나리오가 발생할 수 있습니다.
SELECT AVG(table_name.col1), AVG(table_name.col2), AVG(table_name.col3), table_name.personID, table_name.col4 FROM table_name GROUP BY table_name.personID;
이 쿼리에는 col1, col2, col3에 대한 집계 함수가 포함되어 있습니다. 하지만 집계 없이 col4도 선택합니다. 일반적으로 이러한 쿼리는 Microsoft SQL Server와 같은 다른 데이터베이스 시스템에서는 유효하지 않은 것으로 간주됩니다.
그러나 MySQL에서는 이러한 동작이 허용됩니다. 이유를 이해하는 것이 중요합니다.
GROUP BY 쿼리에서 집계되지 않은 열을 선택할 때 MySQL은 그룹에서 임의의 값을 선택합니다. 이는 일반적으로 그룹에 처음 저장된 행의 값에 해당합니다.
이 기능은 집계되지 않은 열에 대해 선택한 값이 기반에 따라 달라질 수 있는 모호한 쿼리로 이어질 수 있습니다. 그룹의 행 순서에 따라. 예를 들어, 아래 쿼리는 행 순서에 따라 동일한 personID에 대해 col4에 대해 다른 값을 반환할 수 있습니다.
SELECT AVG(table1.col1), table1.personID, persons.col4 FROM table1 JOIN persons ON (table1.personID = persons.id) GROUP BY table1.personID;
모호성을 피하려면 기능적으로 적합한 열을 선택하는 것이 중요합니다. GROUP BY 기준의 열에 따라 달라집니다. 이는 그룹화 열의 각 고유 값에 대해 "모호한" 열에 가능한 값이 하나만 있어야 함을 의미합니다.
MySQL은 ONLY_FULL_GROUP_BY SQL 모드를 제공합니다. MySQL이 ANSI SQL 표준을 준수하도록 만들 수 있습니다. 이 모드에서는 GROUP BY 쿼리에서 집계되지 않은 열을 선택하면 해당 열이 그룹화 열에 기능적으로 종속되지 않는 한 오류가 발생합니다.
MySQL에서는 비집계 열 선택을 허용합니다. GROUP BY 쿼리에서 집계된 열을 사용하는 경우 모호한 결과가 발생할 가능성을 인식하는 것이 중요합니다. 결정적 쿼리를 보장하려면 기능적으로 종속된 열로 명확하게 그룹화되거나 ONLY_FULL_GROUP_BY 모드를 활성화하도록 쿼리를 다시 작성하는 것이 좋습니다.
위 내용은 MySQL이 GROUP BY 쿼리에서 집계되지 않은 열을 허용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!