only_full_group_by = on tells MySQL engine: Do not apply GROUP BY
when you have doubt about what results to show and throw an error. only apply it if the command specifically tells you what to do. i.e. when the command is full and complete!
only_full_group_by = off tells MySQL engine: always apply GROUP BY
and if you have doubt about what results to choose, just pick one randomly!
You will not turn it off if you use GROUP BY
properly!
Example:
Table: users
id | name
----------------
1 ali
2 john
3 ali
When you use GROUP BY
on the name
column:
SELECT * FROM users GROUP BY name;
There are two possible results:
1 ali
2 john
OR
2 john
3 ali
MYSQL does not know what result to choose! Because there are different id
s but both have name=ali
.
Solution1:
only selecting the name
field:
SELECT name FROM users GROUP BY name;
result:
ali
john
This is a perfect solution. removing columns that makes GROUP BY
confused. This means you know what you're doing. Usually, you do not need
those columns, but if you need them, go to solution3!
Solution2:
Turning off only_full_group_by
. MYSQL will show you one of the two possible results RANDOMLY!! (It's ok if you do not really care what id
it will choose)
Solution3
Use an Aggregate
function like MIN()
, MAX()
to help MYSQL to decide what it must choose.
For example, I want the minimum id
:
SELECT MIN(id), name FROM users GROUP BY name;
result:
1 ali
2 john
It will choose the ali
row which has the minimum id
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…