SQL如何实现打印总张数除以墨粉更换次数计算单盒平均打印量
实现方案
你可以把两个查询作为子查询关联后做除法计算即可,SQL写法如下:
SELECT t1.device_id, t1.paper_count, t2.`Change Count`, ROUND(t1.paper_count / t2.`Change Count`, 0) AS Average FROM (SELECT DISTINCT toner.device_id, printer.paper_count FROM toner JOIN printer ON printer.device_id = toner.device_id) t1 INNER JOIN (SELECT device_id, COUNT(toner_color) AS 'Change Count' FROM toner WHERE toner_color = 'Black' GROUP BY device_id) t2 ON t1.device_id = t2.device_id;
补充说明
- 两个原始查询分别作为临时表
t1(存储设备总打印张数)和t2(存储黑色墨粉更换次数),按device_id字段关联 - 如果需要保留没有更换过黑色墨粉的设备,可以把
INNER JOIN换成LEFT JOIN,同时增加逻辑处理除数为0的异常避免报错,示例调整如下:
ROUND(t1.paper_count / IFNULL(t2.`Change Count`, 1), 0) AS Average
- 上述代码用
ROUND函数把结果取整,和你给出的输出示例格式一致,如果需要保留小数可以调整该函数的第二个参数数值。
内容的提问来源于stack exchange,提问作者P3X-774
相关产品推荐
相关产品推荐

