如何解决MySQL SUM使用外键进行内部联接和限制
我有下表: 车辆:
- VID主键
- Reg_no
- 日期
- 初始里程数
里程
- MID主键
- Reg_no外键
- 日期
- Miles_covered
- 服务_
- 总计
我想要的是里程表中外键的最后一行的总和(总计)。
在这种情况下,对MID 7和MID 19求和的查询
我尝试过的事情:
SELECT SUM(Mileage.Total) Totals
FROM (
SELECT *
FROM Mileage
INNER JOIN Vehicles on Mileage.Registration_No=Vehicles.Registration_No
ORDER BY Mileage.MID DESC Limit 1
) SUB
ORDER BY Mileage.MID ASC;
我收到错误1060
我在做什么不正确以及如何做?
解决方法
如果您以最大值MID
来查找“最后一行”,则查询可能类似于:
select sum(total) as totals
from (
select m.total,row_number() over(partition by m.registration_no
order by m.mid desc) as rn
from mileage m
join vehicles v on v.registration_no = m.registration_no
) sub
where sub.rn = 1
,
您可以使用子查询进行过滤,然后进行汇总。假设mid
可以用作排序列:
select sum(m.total) sum_total
from mileage m
where m.mid = (
select max(m1.mid) from mileage m1 where m1.registration_no = m.registration_no
)
这适用于所有版本的MySQL,并且如果您在(registration_no,mid)
上有索引,它应该是一个有效的解决方案。
请注意,您不需要vehicle
表即可获得所需的结果。
如果您想保留车辆表中的所有信息,也可以这样做
SELECT V.*,COALESCE(SUM(M.Total),0) AS ToTal_Last_Mileage
FROM Vehicles V
INNER JOIN
(
SELECT Reg_no,MAX(MID) AS MAxID
FROM Mileage
GROUP BY Reg_no
) MG ON V.Reg_no=MG.Reg_no
INNER JOIN Mileage M ON MG.MaxID=M.MID
应该在MySQL版本上工作
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。