是否可以在不更改sql_mode的情况下获得总和?



我使用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等词作为标识符(例如表名和列名(时要小心。有些关键字和保留字您应该避免或引用反引号。

相关内容

  • 没有找到相关文章

最新更新