gpt4 book ai didi

mysql - 连接两个 Mysql 表并对列进行分组

转载 作者:行者123 更新时间:2023-11-29 19:29:33 26 4
gpt4 key购买 nike

我在 mysql 中获取所需结果时遇到了一个小问题。

我有两个表如下(仅包含相关列):

CREATE TABLE vehicle_log
(id int(11) NOT NULL
,date date NOT NULL
,fuel_taken varchar(40) NOT NULL
,vehicle varchar(6) NOT NULL )

CREATE TABLE fuel_log
(id int(11) NOT NULL
,date date NOT NULL
,fuel_taken varchar(40) NOT NULL
,vehicle varchar(6) NOT NULL
)

我的问题是得到一个结果,该结果返回一个对车辆和日期列进行分组的表,同时还给出其他两个 Fuel_amount 列的总和,如下所示:

date       vehicle fuel_by_receipt fuel_by_log
2016-01-01 KKK222 150 NULL
2016-01-01 KKK252 100 150
2016-01-31 KKK222 120 NULL
2016-02-10 KKK252 100 NULL
2016-02-15 KKK252 50 NULL
2016-11-10 KKK252 20 NULL
2016-11-17 KKK252 10 NULL
2016-01-31 KKK252 NULL 90

用法是比较特定车辆和日期的每个表中的fuel_amount 列,以查看是否存在任何差异并提醒用户。这将在 php 中完成,但不是这个问题的主题。

此外,我需要返回条目,以便它需要在日期范围+上个月的最后一个条目内。 (我已经有了月份、上个月的计算),我只是不知道如何将其包含在查询中。

我正在考虑使用 WHERE 子句,以便:

WHERE date <= end_date AND date >= start_date

但我似乎在仅选择上个月的最后一个条目时遇到问题。

这是我到目前为止所拥有的:

 SELECT f.date
, f.vehicle
, SUM(f.fuel_taken) fuel_by_receipt
, SUM(v.fuel_taken) fuel_by_log
FROM fuel_log f
LEFT
JOIN vehicle_log v
ON v.vehicle = f.vehicle
AND v.date = f.date
GROUP
BY f.date
, f.vehicle
, v.date #<-- THIS LINE IS REDUNDANT
, v.vehicle #<-- AND SO IS THIS

UNION

SELECT f.date
, f.vehicle
, SUM(f.fuel_taken) fuel_by_receipt
, SUM(v.fuel_taken) fuel_by_log
FROM fuel_log f
RIGHT #<-- NOBODY EVER USES RIGHT JOIN
JOIN vehicle_log v
ON v.vehicle = f.vehicle
AND v.date = f.date
GROUP
BY f.date
, f.vehicle
, v.date #<- THIS IS REDUNDANT
, v.vehicle #<- AND SO IS THIS

我可能是从一个非常糟糕的角度来处理这个问题的,所以如果您有任何建议来使用更好、更简单的方法,我会非常高兴。

感谢您提前提供的帮助。

拍拍

最佳答案

您有兴趣比较两个表之间的日期车辆组合。因此,您应该首先获取一个按日期和车辆分组的 SUM,然后将其连接到另一个的分组日期车辆 SUMS 上。因此,不要首先连接表的各个记录,而是连接分组的 SUM。

在执行此操作之前,您应该首先获取所有可能的数据/车辆组合(通过在 UNION 中选择两个表的日期和车辆值并应用 DISTINCT)。将上述操作的结果与此表的日期/车辆字段连接起来。希望这能给您带来启发!

关于mysql - 连接两个 Mysql 表并对列进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41895086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com