1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
I think this problem due to 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 BY
for 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.