patternsqlModerate
1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
Viewed 0 times
expression1055nonaggregatedgroupcolumnselectcontainsandlistnot
Problem
My SQL statement returns properly on my laptop's MySQL (Server version: 5.5.62-0ubuntu0.14.04.1 - (Ubuntu)) but on my server (Server version: 5.7.26-0ubuntu0.16.04.1 - (Ubuntu)) it returns an error.
1055 - Expression #1 of SELECT list is not in GROUP BY clause and
contains nonaggregated column 'shop.orders.id' which is not
functionally dependent on columns in GROUP BY clause; this is
incompatible with sql_mode=only_full_group_by
SELECT *
FROM `orders`
WHERE `mail_sent`='No'
AND `datetime` < DATE_SUB(NOW(), INTERVAL 15 MINUTE)
GROUP BY `contact_id`
ORDER BY `datetime` ASC;1055 - Expression #1 of SELECT list is not in GROUP BY clause and
contains nonaggregated column 'shop.orders.id' which is not
functionally dependent on columns in GROUP BY clause; this is
incompatible with sql_mode=only_full_group_by
Solution
I think this problem due to
To disable follow How to turn on/off MySQL strict mode in localhost (xampp)?
STRICT_TRANS_TABLES is responsible for setting MySQL strict mode.
To check whether strict mode is enabled or not run the below sql:
If one of the value is STRICT_TRANS_TABLES, then strict mode is enabled, else not. In my case it gave
Hence strict mode is enabled in my case as one of the value is STRICT_TRANS_TABLES.
To disable strict mode run the below sql:
[or any mode except STRICT_TRANS_TABLES. Ex: set global sql_mode='NO_ENGINE_SUBSTITUTION';]
To again enable strict mode run the below sql:
If you don't what to disable
like this..
for your query..
Let me know if that helps.
strict mode enabled in your MySQL version. Kindly disable strict mode and try again.To disable follow How to turn on/off MySQL strict mode in localhost (xampp)?
STRICT_TRANS_TABLES is responsible for setting MySQL strict mode.
To check whether strict mode is enabled or not run the below sql:
SHOW VARIABLES LIKE 'sql_mode';If one of the value is STRICT_TRANS_TABLES, then strict mode is enabled, else not. In my case it gave
+--------------+------------------------------------------+
|Variable_name |Value |
+--------------+------------------------------------------+
|sql_mode |STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION|
+--------------+------------------------------------------+Hence strict mode is enabled in my case as one of the value is STRICT_TRANS_TABLES.
To disable strict mode run the below sql:
set global sql_mode='';[or any mode except STRICT_TRANS_TABLES. Ex: set global sql_mode='NO_ENGINE_SUBSTITUTION';]
To again enable strict mode run the below sql:
set global sql_mode='STRICT_TRANS_TABLES';If you don't what to disable
strict_mode then you have to change your sql query to follow sql standard.like this..
SELECT
aggregated_column,
aggregated_column,
aggregation_function(column),
aggregation_function(column),
aggregation_function(column)
FROM
TABLE
WHERE [CLAUSE]
GROUP BY [GROUP BY FIELD]
WHILE [CLAUSE]
ORDER BYfor your query..
SELECT
contact_id,
min(mail_sent),
min(datetime),
max(datetime),
FROM `orders`
WHERE `mail_sent`='No'
AND `datetime` < DATE_SUB(NOW(), INTERVAL 15 MINUTE)
GROUP BY `contact_id`
ORDER BY `datetime` ASC;Let me know if that helps.
Code Snippets
SHOW VARIABLES LIKE 'sql_mode';+--------------+------------------------------------------+
|Variable_name |Value |
+--------------+------------------------------------------+
|sql_mode |STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION|
+--------------+------------------------------------------+set global sql_mode='';set global sql_mode='STRICT_TRANS_TABLES';SELECT
aggregated_column,
aggregated_column,
aggregation_function(column),
aggregation_function(column),
aggregation_function(column)
FROM
TABLE
WHERE [CLAUSE]
GROUP BY [GROUP BY FIELD]
WHILE [CLAUSE]
ORDER BYContext
StackExchange Database Administrators Q#237048, answer score: 14
Revisions (0)
No revisions yet.