You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将两条SQL查询语句执行除法运算?

实现两个SQL查询结果的除法运算

没问题,我来帮你搞定这个需求——把两个查询的结果做除法,得到符合value=0的记录在总符合条件记录中的占比对吧?这里有两种高效的实现方式,你可以根据自己的数据库和场景选择:

方式一:使用子查询直接除法

这种方式逻辑直观,就是把两个查询作为子查询放在同一个SELECT语句里做除法:

SELECT 
  -- 分子:value=0的符合条件记录数
  (SELECT COUNT(*) 
   FROM jmeter 
   WHERE "project" = 'testmatrix' 
     AND "suite" = 'apitest' 
     AND "build"='132' 
     AND "status" = 'ok' 
     AND "page" != 'all' 
     AND "metric" = 'count' 
     AND "value"=0)::FLOAT / 
  -- 分母:所有符合条件的记录数
  (SELECT COUNT(*) 
   FROM jmeter 
   WHERE "project" = 'testmatrix' 
     AND "suite" = 'apitest' 
     AND "build"='132' 
     AND "status" = 'ok' 
     AND "page" != 'all' 
     AND "metric" = 'count') AS value_zero_ratio;

这里用::FLOAT把整数转成浮点型,是为了避免数据库的整数除法取整问题(比如5/2如果是整数除法会得到2,转成浮点后会得到2.5)。如果需要更高精度,也可以用::DECIMAL(10,2)这类格式。

方式二:使用条件聚合(更高效)

这种方式只需要扫描一次表,性能比两次子查询更好,适合数据量较大的场景:

SELECT 
  -- 统计value=0的记录数,转成浮点型
  SUM(CASE WHEN "value" = 0 THEN 1 ELSE 0 END)::FLOAT / 
  -- 统计所有符合条件的记录数
  COUNT(*) AS value_zero_ratio
FROM jmeter 
WHERE "project" = 'testmatrix' 
  AND "suite" = 'apitest' 
  AND "build"='132' 
  AND "status" = 'ok' 
  AND "page" != 'all' 
  AND "metric" = 'count';

逻辑很简单:SUM(CASE...)会把每个value=0的记录算1,其他算0,加起来就是符合条件的数量;COUNT(*)是总数量,两者相除就是你要的比率。

如果你用的数据库支持COUNT(CASE...)的写法,还可以简化成:

SELECT 
  COUNT(CASE WHEN "value" = 0 THEN 1 END)::FLOAT / COUNT(*) AS value_zero_ratio
FROM jmeter 
WHERE "project" = 'testmatrix' 
  AND "suite" = 'apitest' 
  AND "build"='132' 
  AND "status" = 'ok' 
  AND "page" != 'all' 
  AND "metric" = 'count';

因为COUNT会自动忽略NULL值,当value≠0时CASE返回NULL,不会被统计进去,这样也能得到正确的数量。

内容的提问来源于stack exchange,提问作者Srikanta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:35:04