我使用join语句从多个表中获取SUM
值时遇到问题。错误是:
这与 sql_mode=only_full_group_by 不兼容
是否可以在不更改sql_mode
的情况下获得总和?如果可能,如何使SQL语句?
表fuel
:
vehicle_id | liter
-----------+-----------
2 | 43.5
4 | 78.3
8 | 20.5
表usage
:
date_usage | vehicle_id
-----------+-----------
2019-10-01 | 8
2019-10-15 | 2
2019-10-20 | 8
2019-10-20 | 4
2019-11-02 | 8
SQL 语句如下:
SELECT fuel.vehicle_id, SUM(fuel.liter), usage.date_usage
FROM fuel
LEFT JOIN usage ON fuel.vehicle_id = usage.vehicle_id
WHERE fuel.vehicle_id='8'
AND usage.date_usage >='2019-10-01' AND usage.date_usage <='2019-10-31'
GROUP BY fuel.vehicle_id
您有两种可能性可以解决此问题:
- 从
SELECT
中删除列usage.date_usage
。 - 在列
usage.date_usage
上也使用聚合函数:MAX
以获取列的最大值。MIN
以获取列的最小值。ANY_VALUE
获取列的任何值。
因此,您的查询可能如下所示(在第usage.date_usage
列上使用MAX
(:
SELECT fuel.vehicle_id, SUM(fuel.liter), MAX(`usage`.date_usage)
FROM fuel LEFT JOIN `usage` ON fuel.vehicle_id = `usage`.vehicle_id
WHERE fuel.vehicle_id = 8
AND `usage`.date_usage BETWEEN '2019-10-01' AND '2019-10-31'
GROUP BY fuel.vehicle_id
dbfiddle.uk 演示
注意:在 MySQL 中使用usage
等词作为标识符(例如表名和列名(时要小心。有些关键字和保留字您应该避免或引用反引号。