检查并比较两个不相关表的计数

r9f1avp5  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(409)

我有下面的table
表1:“演示”列:ssn、sales、create\u dt、update\u dt
表2:“代理”列:ssn、sales、代理名称、create、update
场景1和期望的结果集:我希望输出为0,如果demo表中的ssn计数与agent表中的ssn计数匹配,如果该计数不匹配,那么我希望结果为1
场景2和期望的结果集:如果演示表中的销售总额与代理表中的销售总额匹配,则我希望输出为0如果销售总额不匹配,则我希望结果为1
请在此查询部分提供帮助
谢谢

brgchamk

brgchamk1#

您可以分别编写两个查询以在结果查询中进行计数

SELECT (SELECT count(Demo.SSN) as SSN1 from Demo)!=(SELECT count(Agent.SSN) as SSN2 from Agent) AS Result;

基本上,内部查询所做的是检查计数是否相等,如果为真则输出1,如果为假则输出0。既然您要求输出1,如果它是false,我就使用 '!=' 签字。
您也可以在场景2中尝试相同的过程

plicqrtu

plicqrtu2#

对于场景1

select (Case when (select count(ssn) from Demo)=(select count(ssn) from Agent) then 0 else 1 end) as desired_result

如果要计算唯一ssn,则:

select (Case when (select count(distinct ssn) from Demo)=(select count(distinct ssn) from Agent) then 0 else 1 end) as desired_result

对于场景2:

select (Case when (select sum(sales) from Demo)=(select sum(sales) from Agent) then 0 else 1 end) as desired_result
qvk1mo1f

qvk1mo1f3#

我建议使用一个包含两组信息的查询:

select (d.num_ssn <> a.num_ssn) as have_different_ssn_count,
       (d.sales <> a.sales) as have_different_sales
from (select count(distinct ssn) as num_ssn,
             coalesce(sum(sales), 0) as sales
      from demo
     ) d cross join
     (select count(distinct ssn) as num_ssn, 
             coalesce(sum(sales), 0) as sales
      from agent
     ) a;

注意:这将返回布尔值-- true / false 而不是 1 / 0 . 如果你真的想 0 / 1 ,然后使用 case :

select (case when d.num_ssn <> a.num_ssn then 1 else 0 end) as have_different_ssn_count,
       (case when d.sales <> a.sales then 1 else 0 end) as have_different_sales

如果您不仅对总数感兴趣,而且对两个表中的代理/销售组合都相同,我也不会感到惊讶。如果是这样的话,请提出一个新的问题,并解释清楚。样本数据和期望的结果有帮助。

相关问题