MySQL::MySQL5.6Reference Manual::12.19.3MySQL 처리의 그룹에 의해
12.19.3MySQL 처리의 그룹에 의해
기준에서 SQL, 을 포함하는 쿼리GROUP BY
GROUP BY
clause. 예를 들어,이 쿼리가 불법적 기준에서 SQL 기 때문에 끌어냅니다name
GROUP BY
:
SELECT o.custid, c.name, MAX(o.payment) FROM orders AS o, customers AS c WHERE o.custid = c.custid GROUP BY o.custid;
에 대한 쿼리,법적으로name
GROUP BY
clause.
MySQL 확장 표준 SQL 사용하의GROUP BY
GROUP BY
clause. 이것은 앞의 쿼리가 mysql 에서 합법적이라는 것을 의미합니다. 이 기능을 사용하여 불필요한 열 정렬 및 그룹화를 방지하여 더 나은 성능을 얻을 수 있습니다. 그러나,이것은 주로 유용할 때 모든 값을 각각에서 끌어냅니다 열에 포함되지 않은 경우GROUP BY
ORDER BY
ORDER BY
에 영향을 미치지 않는 값에서 각 그룹 서버 선택합니다.
비슷한 MySQL 확장이HAVING
절에 적용됩니다. 표준에서 SQL 쿼리를 참조할 수 없습니다를 끌어냅니다 열HAVING
GROUP BY
clause. 계산을 단순화하기 위해 MySQL 확장은 이러한 열에 대한 참조를 허용합니다. 이 확장은 그룹화되지 않은 열에 동일한 그룹 별 값이 있다고 가정합니다. 그렇지 않으면 결과가 비 결정적입니다.
MySQLGROUP BY
확장을 비활성화하고 표준 SQL 동작을 활성화하려면ONLY_FULL_GROUP_BY
SQL 모드를 활성화하십시오. 이 경우,열을 없습에서 이름GROUP BY
HAVING
절로 묶지 않는 한 집계 기능입니다.
선택 목록 확장은ORDER BY
ORDER BY
GROUP BY
clause. (그러나,이전에 언급한ORDER BY
ONLY_FULL_GROUP_BY
SQL 모드가 활성화 된 경우에는 적용되지 않습니다.
경우 쿼리가 집계 기GROUP BY
clause,그것은 있을 수 없습 끌어냅니다 열을 선택 목록에서,HAVING
ORDER BY
ONLY_FULL_GROUP_BY
사용:
mysql> SELECT name, MAX(age) FROM t;ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)with no GROUP columns is illegal if there is no GROUP BY clause
지 않고GROUP BY
name
값을 선택합니다.
표준 SQL 에 대한 또 다른 MySQL 확장은HAVING
절에서 select 목록의 앨리어싱 된 표현식에 대한 참조를 허용합니다. ONLY_FULL_GROUP_BY
name
orders
ONLY_FULL_GROUP_BY
은 사용할 수 있습니다.
SELECT name, COUNT(name) FROM orders GROUP BY name HAVING COUNT(name) = 1;
다음과 같은 쿼리가 허용하는 경우에만ONLY_FULL_GROUP_BY
사용할 수 없습니다.
SELECT name, COUNT(name) AS c FROM orders GROUP BY name HAVING c = 1;
하려고 하는 경우에 따라 표준 SQL 사용할 수 있습니만 열이 식은GROUP BY
절입니다. 문제 해결 방법으로,별칭을 사용한 표현:
SELECT id, FLOOR(value/100) AS val FROM tbl_name GROUP BY id, val;
MySQL 허가 noncolumn 식GROUP BY
조항,그래서 별칭을 불필요한다.
SELECT id, FLOOR(value/100) FROM tbl_name GROUP BY id, FLOOR(value/100);
Leave a Reply