MySQL SUM () INNER JOIN AND LIMIT using FOREIGN KEY
MySQL SUM () INNER JOIN AND LIMIT using FOREIGN KEY
我有以下 table:
车辆:
- VID 主键
- Reg_no
- 日期
- Initial_mileage
里程
- MID 主键
- Reg_no 外键
- 日期
- Miles_covered
- To_service
- 总计
我想要的是对里程中外键的每一行求和(总计)table。
在这种情况下,查询求和 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
table 来获得您想要的结果。
如果您想保留车辆的所有信息table,您也可以这样做
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 个版本
我有以下 table: 车辆:
- VID 主键
- Reg_no
- 日期
- Initial_mileage
里程
- MID 主键
- Reg_no 外键
- 日期
- Miles_covered
- To_service
- 总计
我想要的是对里程中外键的每一行求和(总计)table。
在这种情况下,查询求和 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
table 来获得您想要的结果。
如果您想保留车辆的所有信息table,您也可以这样做
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 个版本