[MySQL] ONLY_FULL_GROUP_BY ์๋ฌ
๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์ GROUP BY๋ฅผ ์ฌ์ฉํ๋ Query์์ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
"Expression #20 of SELECT list is not in GROUP BY clause and contains nonaggregated column '์ปฌ๋ผ๋ช ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by"
๊ฒ์์ ํด๋ณด๋ MySQL 5.7 Version ๋ถํฐ SQL_MODE๊ฐ ์๊ฒผ๋ค๊ณ ํ๋ค. (์ฐธ๊ณ )
SQL_MODE๋ MySQL์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ํ ์ ํจ์ฑ ๊ฒ์ฌ(validation check) ๋ฒ์๋ฅผ ์ค์ ํ๋ ์์คํ ๋ณ์์ด๋ค.
์๋ฌ๋ SQL_MODE์ ์ต์ ์ค ํ๋์ธ ONLY_FULL_GROUP_BY์ ๊ด๋ จ๋ ๊ฒ์ด์๋ค.
MySQL 8.0์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ONLY_FULL_GROUP_BY ์ต์ ์ด ํ์ฑํ๋์ด ์๋ค๊ณ ํ๋๋ฐ, OS์ ์ฐจ์ด์ธ์ง ๋ด ๊ฐ๋ฐํ๊ฒฝ์๋ ์ ์ฉ๋์ด ์์ง ์์๋ค. (์๋ง Windows OS์ฌ์ ๊ทธ๋ฐ ๊ฒ์ด ์๋๊น ์ถ์ธก)
๊ทธ๋์ ๋ก์ปฌ์์๋ ์ ๋๋ก ๋์๊ฐ๋ ๊ธฐ๋ฅ์ด ์๋ฒ์ ์ฌ๋ ธ์ ๋ ONLY_FULL_GROUP_BY ์ต์ ์ ๊ฑธ๋ ค์ ๋จนํต์ด ๋ ๊ฒ์ด๋ค.
๊ฐ๋ฐํ๊ฒฝ์ ํต์ผํ๊ธฐ ์ํด SQL_MODE์ ์ต์ ์ ์ถ๊ฐํ๊ณ ์ฟผ๋ฆฌ๋ฅผ ์์ ํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
์ฟผ๋ฆฌ ์์ ํ๊ธฐ
GROUP BY์ ์ ์ฌ์ฉํ ๋ SELECT ํด์์ผ ํ๋ ์ปฌ๋ผ์ ๋ชจ๋ ๋์ดํด์ฃผ์ด์ผ ํ๋ค. GROUP BY์ ์ ์ธ๋์ง ์์ ์ปฌ๋ผ์ ๊ฐ์ ธ์ค๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค.
SELECT name, ANY_VALUE(email), Max(age)
FROM MEMBER
GROUP BY name;
GROUP BY๋ก ๋ฌถ์ด์ฃผ์ง ์๋ ์ปฌ๋ผ์ ANY_VALUE() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌํ๋ฉด ์ ์์ ์ผ๋ก ๋์ํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
SQL_MODE ์ต์ ์ถ๊ฐํ๊ธฐ
ํ์ฌ ์ ์ฉ๋์ด ์๋ SQL_MODE๋ฅผ ์กฐํ
MySQL ์๋ฒ์ ์ ์(mysql -u root -p) ํ SELECT @@SQL_MODE; ๋ช ๋ น์ด๋ก ํ์ฌ ์ ์ฉ๋์ด ์๋ SQL_MODE ์ต์ ์ ์กฐํํ๋ค.
SELECT @@SQL_MODE;
SQL_MODE๋ฅผ ์๊ตฌ์ ์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด my.ini (Windows OS) ํ์ผ์ SQL_MODE ์์ฑ์ ์ถ๊ฐํด์ค์ผ ํ๋ค.
** my.ini ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ
1. ์คํ์ฐฝ(์๋์ฐํค + R)์์ services.msc ๋ช ๋ น์ด๋ฅผ ํตํด ์๋น์ค์ฐฝ ์ด๊ธฐ
2. MySQL80์ ์์ฑ์์ ์คํํ์ผ ๊ฒฝ๋ก๋ฅผ ํ์ธ (C:\ProgramData\MySQL\MySQL Server 8.0\my.ini)
์ค์ ์ถ๊ฐํ๊ธฐ
my.ini ํ์ผ์์ [mysqld] ๊ตฌ๊ฐ์ sql_mode ์์ฑ์ ํ์ํ ์ต์ ์ ์ถ๊ฐํด์ค๋ค.
sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
** my.ini ํ์ผ์ ์์ ๊ถํ ๋ณ๊ฒฝํ๊ธฐ
๊ถํ์ด ์์ด ํ์ผ์ ์์ ํ ์ ์๋ค๋ ์๋ฆผ์ฐฝ์ด ๋จ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๊ทธ๋ด ๋๋ ์ฌ์ฉ ๊ถํ์ ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ค.
my.ini ์ค๋ฅธ์ชฝ ํด๋ฆญ-์์ฑ-๋ณด์ ํญ์์ ์ฌ์ฉ์์ ๊ถํ์ ํ์ฉํด์ฃผ๋ฉด ์์ ์ด ๊ฐ๋ฅํด์ง๋ค.
์ฐธ๊ณ
https://info-lab.tistory.com/274