php - 在mysql中计算总成本
问题描述
我有一个数据库表燃料,其中有一个 fID 字段(主要,自动增量)、vID(用于车辆 ID)、体积(以升为单位的燃料量)、价格(用于每升燃料的成本)、仪表(用于当前加注日期的车辆里程表),日期(车辆加注日期),vendorID(燃料供应商或车辆加注地点),注释(车辆或燃料的任何附加注释)和类型(燃料等级)。
我想进行一个查询,通过将体积(购买的升数)乘以价格(每升成本)然后添加特定车辆的所有燃料条目的总数,然后最后添加成本来计算每次填充的燃料成本表中的所有燃料条目(fID 是唯一的,但 vID 会重复(因为车辆会不时加满)。
这就是我现在正在运行的,但它只返回每次填充的成本(而不是添加其他填充)。
Select
date_format(f1.date, '%y-%m-%y %H:%i:%s) as date,
f1.meter as mileage,
case when f2.meter is null then 0
else f1.meter - f2.meter
end as distance
f1.fID,
f1.volume,
f1.volume * f1.price as cost
from
fuel f1
left outer join
fuel f2
On
f2.date = (
select
max(date)
from
fuel
where
fuel.vID = f1.vID
and
fuel.date < f1.date
)
where
f1.ID = ?
Order by f1.date
任何帮助将不胜感激。
解决方案
您只需对查询进行细微更改,删除WHERE
子句并添加GROUP BY
:
SELECT f1.vid,
DATE_FORMAT(f1.date, '%y-%m-%d %H:%i:%s') AS date,
f1.meter AS mileage,
CASE WHEN f2.meter IS NULL THEN 0
ELSE f1.meter - f2.meter
END AS distance,
f1.volume,
SUM(f1.volume * f1.price) AS cost
FROM fuel f1
LEFT JOIN fuel f2
ON f2.date = (SELECT MAX(date)
FROM fuel
WHERE fuel.vID = f1.vID AND fuel.date < f1.date)
GROUP BY f1.vid, f1.date WITH ROLLUP
对于您上一个问题的示例数据,这给出了以下结果。您可以在列中检测每辆车的汇总行,null
在列中检测date
总体汇总行。null
vid
vid date mileage distance volume cost
26 18-05-27 05:57:00 4500 0 25 18750
26 18-05-27 05:58:00 6000 1500 20 15000
26 (null) 6000 1500 20 33750
27 18-05-27 04:58:00 1200 0 15 18000
27 18-05-27 05:50:00 2000 800 5 5000
27 (null) 2000 800 5 23000
28 18-05-27 05:53:00 5000 0 15 12000
28 (null) 5000 0 15 12000
(null) (null) 5000 0 15 68750
如果您对查看每辆车的各个条目不感兴趣,则可以从GROUP BY
(以及从选择中删除特定于日期的变量)中删除日期。此查询还将对距离和体积求和:
SELECT f1.vid,
SUM(CASE WHEN f2.meter IS NULL THEN 0
ELSE f1.meter - f2.meter
END) AS distance,
SUM(f1.volume) as volume,
SUM(f1.volume * f1.price) AS cost
FROM fuel f1
LEFT JOIN fuel f2
ON f2.date = (SELECT MAX(date)
FROM fuel
WHERE fuel.vID = f1.vID AND fuel.date < f1.date)
GROUP BY f1.vid WITH ROLLUP
输出(摘要行有null
)vid
:
vid distance volume cost
26 1500 45 33750
27 800 20 23000
28 0 15 12000
(null) 2300 80 68750
推荐阅读
- html - 尝试使用 VBA 抓取 Freddie Mac 网站
- python - 后台python进程的命令行界面
- r - 在 RPostgreSQL 中使用 dbWriteTable 写入表的权限被拒绝
- reactjs - 如何在材质 UI 中针对不同的屏幕分辨率有条件地渲染对话框和抽屉?
- python - 如何在xilinx vitis中添加python
- google-cloud-platform - Google Cloud 中不常见的 ffmpeg
- javascript - 在数组中搜索字符串匹配
- docker - 如何在 docker-compose 中配置网络?
- java - 文本识别器更改保存数据编辑文本的行为
- python - 使用python在ppt中添加视频无法播放