๊ธฐ๋ณธ ํ๊ฒฝ: docker image mysql:latest
์๋์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฌธ ์คํ
SELECT cs.clientId, cs.clientName, cg.groupId, g.groupName
FROM Clients AS cs
LEFT OUTER JOIN ClientGroups cg ON cs.clientId = cg.clientId
LEFT OUTER JOIN `Groups` g ON g.groupId = cg.groupId GROUP BY cs.clientId
์๋ฌ ๋ฉ์์ง ๋ฐ์
[42000][1055] Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'sendingo_test.cg.groupId' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
SELECT @@sql_mode;
SELECT @@session.sql_mode;
-- ๊ธฐ๋ณธ : ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
ONLY_FULL_GROUP_BY
์ ์ธํ ๊ฐ์ผ๋ก ์ค์
-- ๋ชจ๋ ์ค์ ์ด๊ธฐํ
SET GLOBAL sql_mode ='';
SET SESSION sql_mode = '';
-- ONLY_FULL_GROUP_BY ๋ฅผ ์ ์ธํ๊ณ ์ค์
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
- MySQL์์ ์ฌ์ฉ๋๋ SQL_MODE
- GROUP BY ์ ์์ ์ ํ๋์ง ์์ ์ปฌ๋ผ์ด๋ ํจ์๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ์๋ฌ๋ฅผ ๋ฐฉ์งํจ
๋ง์ฝ only_full_group_by
๋ชจ๋๊ฐ ์ค์ ๋์ด ์์ง ์์ผ๋ฉด, ์์์ ๋งํ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์.
ํ์ง๋ง ํด๋น ๋ชจ๋๋ฅผ ํด์ ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์.
์์:
SELECT column1, column2, AVG(column3)
FROM table1
GROUP BY column1
์ SQL ์ฟผ๋ฆฌ์์ column2๋ GROUP BY ์ ์ ๋ฃ์ง ์์ ์ปฌ๋ผ
only_full_group_by
๋ชจ๋๊ฐ ์ค์ ๋์ด ์์ง ์์ ๊ฒฝ์ฐ, ๋ฌธ์ ์์ด ์คํ๋๋ column2๋ column1 ๋ณ๋ก ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฏ๋ก, ๊ฒฐ๊ณผ๊ฐ ๋ถ์ผ์นํ ๊ฐ๋ฅ์ฑ์ด ๋์
๋ฐ๋ผ์, only_full_group_by
๋ชจ๋๋ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ๊ผญ ์ค์ ํด์ฃผ๋ ๊ฒ์ด ์ข์.
์ค์ ๋ฐฉ๋ฒ:
SET GLOBAL sql_mode=(SELECT CONCAT(@@sql_mode, ',ONLY_FULL_GROUP_BY'));