Mysql 使用查询动态输出设备总使用量和总归还量
您好,下午好/早上好,我有一个逻辑错误,即如何正确输出每台设备的总使用量,以及该设备的总退货量 此表的示例:(每个表都有其总数量) 设备表:Mysql 使用查询动态输出设备总使用量和总归还量,mysql,sql,Mysql,Sql,您好,下午好/早上好,我有一个逻辑错误,即如何正确输出每台设备的总使用量,以及该设备的总退货量 此表的示例:(每个表都有其总数量) 设备表: 设备使用情况表: 设备退货使用情况表: 一旦项目使用设备,设备将记录在“设备使用情况”表中,如果项目返回特定设备,则将设备记录器返回到“设备返回”表中 以下是我对如何输出数据的疑问: 预期输出: 所有设备将在列中提取,包括可用设备、使用设备、返回设备,我的公式显示此表的想法是: total_equipment as total_quanti
设备使用情况表:
设备退货使用情况表:
一旦项目使用设备,设备将记录在“设备使用情况”表中,如果项目返回特定设备,则将设备记录器返回到“设备返回”表中 以下是我对如何输出数据的疑问:
预期输出: 所有设备将在列中提取,包括可用设备、使用设备、返回设备,我的公式显示此表的想法是:
total_equipment as total_quantity,
(total_equipment - total_usage of equipment) as available,
total_usage of equipment,
total_return of equipment
所有形式的查询都被接受,只是为了输出这个预期的表,提前谢谢。:) 要解决此问题,需要在执行联接之前进行聚合。看起来是这样的:
SELECT e.equip_ID, e.equip_Name,u.unit_Name,
COALESCE(eu.usage_quantity, 0) as usage_quantity,
COALESCE(er.return_quantity, 0) as return_quantity
FROM equipment e INNER JOIN
unit u
ON u.unit_ID = e.unit_ID LEFT JOIN
(SELECT eu.equip_id, SUM(eu.usage_Quantity) as usage_Quantity
FROM equipment_usage eu
GROUP BY eu.equip_ID
) eu
ON eu.equip_ID = e.equip_ID LEFT JOIN
(SELECT eu.equip_id, SUM(er.return_Quantity) as return_Quantity
FROM equipment_return er JOIN
equipment_usage eu
ON er.usage_ID = eu.usage_ID
GROUP BY eu.equip_id
) er
ON er.equip_ID = e.equip_ID;
是一个SQL FIDLE。您不能在最终查询中包含用法id,因为用法表中有多个设备id。在计算可用设备之前,我先得到总数。请参见此处的演示:
谢谢@Gordon Linoff
SELECT * FROM equipment_return
SELECT
e.equip_ID,
e.equip_Name,
u.unit_Name,
e.equip_Quantity total_Quantity,(
SELECT IF(
((e.equip_Quantity - eu.usage_Quantity)
+er.return_Quantity) IS NULL, e.equip_Quantity, (( e.equip_Quantity - eu.usage_Quantity)+er.return_Quantity))) available,
(eu.usage_Quantity - er.return_Quantity) usage_Quantity,
er.return_Quantity ,
eu.usage_ID
FROM `equipment` e
INNER JOIN unit u ON u.unit_ID = e.unit_ID
LEFT JOIN equipment_usage eu ON eu.equip_ID = e.equip_ID
LEFT JOIN equipment_return er ON er.usage_ID = eu.usage_ID
total_equipment as total_quantity,
(total_equipment - total_usage of equipment) as available,
total_usage of equipment,
total_return of equipment
SELECT e.equip_ID, e.equip_Name,u.unit_Name,
COALESCE(eu.usage_quantity, 0) as usage_quantity,
COALESCE(er.return_quantity, 0) as return_quantity
FROM equipment e INNER JOIN
unit u
ON u.unit_ID = e.unit_ID LEFT JOIN
(SELECT eu.equip_id, SUM(eu.usage_Quantity) as usage_Quantity
FROM equipment_usage eu
GROUP BY eu.equip_ID
) eu
ON eu.equip_ID = e.equip_ID LEFT JOIN
(SELECT eu.equip_id, SUM(er.return_Quantity) as return_Quantity
FROM equipment_return er JOIN
equipment_usage eu
ON er.usage_ID = eu.usage_ID
GROUP BY eu.equip_id
) er
ON er.equip_ID = e.equip_ID;
SELECT equip_ID,
equip_Name,
unit_Name,
total_Quantity,
total_Quantity - coalesce(sum(total_usage),0) + coalesce(sum(total_return),0) as available,
sum(total_usage) as total_usage,
sum(total_return) as total_return
FROM (
SELECT
e.equip_ID,
e.equip_Name,
u.unit_Name,
e.equip_Quantity as total_quantity,
eu.usage_Quantity as total_usage,
sum(er.return_Quantity) as total_return,
eu.usage_ID
FROM `equipment` e
INNER JOIN unit u ON u.unit_ID = e.unit_ID
LEFT JOIN equipment_usage eu ON eu.equip_ID = e.equip_ID
LEFT JOIN equipment_return er ON er.usage_ID = eu.usage_ID
group by e.equip_ID,
e.equip_Name,
u.unit_Name,
e.equip_Quantity,
eu.usage_Quantity,
eu.usage_ID) t
group by equip_ID,
equip_Name,
unit_Name,
total_Quantity
Result:
equip_ID equip_Name unit_Name total_Quantity available total_usage total_return
13 Linemen Safety Belts set 20 20 (null) (null)
14 3tons Lever Block pc 30 24 13 7
15 1.5 tons Lever Block pc 10 1 10 1
16 3/4 tons Lever Block pc 1 1 1 1
17 5 tons Chain Block pc 1 0 1 (null)
18 3 tons Chain Block pc 1 1 (null) (null)
19 Linemen Tools (pliers, wrenches, hammers) lot 1 1 (null) (null)
20 Extendable Ladder 21 ft. Fiberglass pc 2 2 (null) (null)
21 Aluminum Ladder 10 ft. pc 2 2 (null) (null)