首页 > 解决方案 > 在sql数据库中找到2列之间的值的不同和力量

问题描述

我只是在新项目中工作,我需要进行一些数学运算并在我的数据库中的 2 列之间进行比较,在我的数据库中,我有 2 个表(before_process)和(after_process)它们都有列名(doc_num),这个doc_num in(before_process 表有一些值),但是在处理时值会有所不同:

我的代码:

SELECT befor_process.SYS_ID,
  befor_process.st_id,
  after_prcoess.file_name,
  after_prcoess.FORM,
  COUNT(*)             AS DB_ST,
  COUNT(befor_process.doc_num) AS DB_ZS
FROM log_table after_prcoess
INNER JOIN status_table befor_process
ON after_prcoess.doc_num       = befor_process.doc_num
WHERE after_prcoess.FORM          IS NOT NULL
AND befor_process.STATUS  = 100
AND after_prcoess.doc_num NOT IN
  ( SELECT doc_num FROM status_table WHERE STATUS >= 101
  )
GROUP BY befor_process.SYS_ID,
  befor_process.st_id,
  after_prcoess.file_name,
  after_prcoess.FORM
ORDER BY befor_process.SYS_ID,
  befor_process.st_id;

我的 query_result 将是:

在此处输入图像描述

但所需的结果是(如果 2 个值等于或双倍于 after_process 表中的值将为空,但如果超过双倍,它将给出结果,如下图所示:

在此处输入图像描述

标签: sql

解决方案


我认为您想要的逻辑表示为:

(case when COUNT(*) > 2 * COUNT(befor_process.doc_num) 
      then 2 * COUNT(befor_process.doc_num) - COUNT(*)
 end) as result

我唯一的困惑是COUNT(befor_process.doc_num)永远不能大于COUNT(*),但你的问题暗示这是这样的。也许列别名在问题中是倒退的。


推荐阅读