1

SUM我在使用 join 语句从多个表中获取值时遇到问题。错误是:

这与 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
4

1 回答 1

1

你有两种可能解决这个问题:

  • usage.date_usage从中删除列SELECT
  • 在列上也使用聚合函数usage.date_usage
    • MAX获取该列的最高值。
    • MIN获取列的最小值。
    • ANY_VALUE获取列的任何值。

因此,您的查询可能如下所示(MAX在 column 上使用usage.date_usage):

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 上的演示

注意:小心usage在 MySQL 中使用诸如标识符之类的词(例如表和列名)。您应该避免使用关键字和保留字或用反引号引用。

于 2019-12-19T14:22:49.607 回答