sql - 执行百分比时除以零错误(带有日期参数的未连接表的除数)
问题描述
我试图获得产品出现故障的次数的百分比。我在一张表中有故障,在另一张表中有吞吐量。吞吐量永远不能为 0。如果为 0,则永远不会运行报告。不幸的是,无法连接表。我可以获得在 SQL 中返回的正确结果,但是当我将查询应用于应用了日期参数的制造软件时,我收到除以 0 错误。
在 SQL 中工作的查询:
SELECT
CAST (COUNT (faulttype.faults) AS FLOAT)/
CAST ((SELECT COUNT(throughput.throughput)
FROM [throughput]
WHERE throughput.throughput >= '2017-08-08 00:00:00' and throughput.throughput <= '2018-08-13 23:59:00')
AS FLOAT)
*100 Percentage
FROM faults (nolock)
INNER JOIN faulttype (nolock) ON faults = faults.faults
where fault.procedure = 15
and faults.regtime >= '2017-08-08 00:00:00' and qc_inspections.regtime <= '2018-08-13 23:59:00'
应用日期参数的查询(收到除以 0 错误):
SELECT
CAST (COUNT (faulttype.fault) AS FLOAT)/
CAST ((SELECT COUNT(throughput.throughput)
FROM [throughput]
WHERE CAST(faultype.regtime as date) between @datetimerange_From and @datetimerange_To
AS FLOAT)
*100 Percentage
FROM faults (nolock)
INNER JOIN faulttype (nolock) ON faults.id = faulttype.fault
where fault.procedure = 15
and CAST(faults.regtime as date) between @datetimerange_From and @datetimerange_To
我试过 nullif 和 case 语句都无济于事。由于缺少连接,案例语句不起作用。我设法捏造了一些东西,以便案例语句搜索 ID 计数为 1,然后显示一个(它永远不会),否则执行我的除法。我认为它会欺骗 SQL 在用户应用日期参数之前看不到 0。Buuuut 那没有用,我相信有人会告诉我为什么大声笑。
解决方案
奇怪的是,您没有加入 [吞吐量] 表,但如果我接受您的查询,请尝试这样的事情:
with CountFault as (
select count(throughput) CountFault
from [throughput]
where CAST(throughput as date) between @datetimerange_From and @datetimerange_To
)
select count(f2.fault as decimal) / nullif(f3.CountFault, 0) * 100
from faults f1
INNER JOIN faulttype f2 ON f1.id = f2.fault
cross join CountFault f3
where f1.procedure = 15 and CAST(f1.regtime as date) between @datetimerange_From and @datetimerange_To
推荐阅读
- performance - 获取字符串的所有连续子字符串的最佳方法
- java - 如何在 Android 设备上关闭/接受设备位置弹出窗口 - Selenium with Browser stack
- laravel - 架构文件未在测试中运行
- ios - 当键盘出现时更新 WKWebView 大小而不滚动错误
- python - 如何根据元组中索引的升序打印字符串
- ubuntu-18.04 - scp 卡在没有任何错误的情况下,直到我将终端移动到另一台显示器
- google-cloud-platform - 带有 Cloud Run 的 Google Cloud Platform 负载均衡器引发 404 错误
- c - 在 MPI 中定义新的数据类型,在 C 中使用数组
- python - python django中的计算字段
- python - 定义为另一个列表类型类属性的长度的类属性不会自行更新并且总是返回相同的值