P粉3005417982023-08-22 11:53:58
There is a system variable ONLY_FULL_GROUP_BY
in the MySql engine.
Starting with Mysql version 5.7.5 : ONLY_FULL_GROUP_BY
SQL mode is enabled by default.
Prior to version 5.7.5: ONLY_FULL_GROUP_BY
is not enabled by default.
If ONLY_FULL_GROUP_BY
SQL mode is enabled (enabled by default starting with version 5.7.5), MySQL will reject query select lists, HAVING
conditions, or ORDER BY
The list references non-aggregate columns that are neither named in the GROUP BY
clause nor are they dependent on them.
(1) PHPMyAdmin
Disable: ONLY_FULL_GROUP_BY
Mode
If you are using phpMyAdmin, please change the sql_mode
settings according to the screenshot below.
Editsql mode
Variable and remove from valueONLY_FULL_GROUP_BY
Text
or
(2) SQL/Command Prompt
Disable by running the following command: ONLY_FULL_GROUP_BY
mode.
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
or
(3) Do not use SELECT *
Do not disable ONLY_FULL_GROUP_BY
mode, instead
Use related columns in SELECT
queries. Related columns refer to columns that appear in the group by
clause or have aggregate functions (MAX
, MIN
, SUM
, COUNT
etc.) column
Changes made using point(1) or point(2)
are not set permanently and will be restored after every reboot.
Therefore, you should set this in the configuration file (for example, in [mysqld]
section /etc/mysql/my.cnf
) so that when MySQL restarts Changes still take effect after startup:
Configuration file:/etc/mysql/my.cnf
Variable name: sql_mode
or sql-mode
Remove the word ONLY_FULL_GROUP_BY
from the value and save the file.
Note: If the sql_mode
variable is not found in the configuration file, please insert the following 2 lines
[mysqld] sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
P粉2783794952023-08-22 11:13:03
This
This problem will be solved simply by changing the SQL mode in MySQL, using the following command:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Works for me too... I used this because in my project I had a lot of similar queries so I just changed this SQL mode to only_full_group_by
Or simply include all columns specified in the SELECT statement in the GROUP BY clause. sql_mode can remain enabled.
Thanks... :-)
Update date: July 14, 2023
Changing the SQL schema is a workaround, but best practice for structured query languages would be to avoid selecting all (SELECT *...) columns and instead use aggregate functions on grouped columns like @Tim Biegeleisen https://stackoverflow.com/a/41887524/3602846
mentioned in the answer below