在 SQL 中获取两个计数的差异
Posted
技术标签:
【中文标题】在 SQL 中获取两个计数的差异【英文标题】:Getting difference of two counts in SQL 【发布时间】:2011-10-17 20:53:08 【问题描述】:我正在 Netezza 中进行一些 QA,我需要比较两个单独的 SQL 语句的计数。这是我目前使用的 SQL
SELECT COUNT(*) AS RECORD_COUNT
FROM db..EXT_ACXIOM_WUL_FILE A
LEFT JOIN (select distinct CURRENTLY_OPTED_IN_FL,mid_key from db..F_EMAIL) B
ON A.MID_KEY=B.MID_KEY
MINUS
SELECT COUNT(*)
FROM db..EXT_ACXIOM_WUL_FILE A
但是,MINUS 似乎不是这样工作的。当计数匹配时,这将为 Record_count 返回 null,而不是返回 0。我基本上将记录数计算为:
record_count=count1-count2
因此,如果计数相等,则为 0,否则为差异。正确的 SQL 是什么?
【问题讨论】:
【参考方案1】:SELECT
(
SELECT COUNT(*) AS RECORD_COUNT
FROM db..EXT_ACXIOM_WUL_FILE A
LEFT JOIN (select distinct CURRENTLY_OPTED_IN_FL,mid_key from db..F_EMAIL) B
ON A.MID_KEY=B.MID_KEY
) -
(
SELECT COUNT(*)
FROM db..EXT_ACXIOM_WUL_FILE A
) TotalCount
Oracle 的MINUS
(SQL Server 中的EXCEPT
)是完全不同的动物 :)
如果你理解UNION
然后思考集合,你就会理解MINUS
/EXCEPT
【讨论】:
【参考方案2】:MINUS
是设置差异,不适用于算术运算。
你可以的
SELECT COUNT(*) - (SELECT COUNT(*)
FROM db..EXT_ACXIOM_WUL_FILE A) AS Val
FROM db..EXT_ACXIOM_WUL_FILE A
LEFT JOIN (select distinct CURRENTLY_OPTED_IN_FL,
mid_key
from db..F_EMAIL) B
ON A.MID_KEY = B.MID_KEY
或者其他选项
SELECT COUNT(*) - COUNT(DISTINCT A.PrimaryKey) AS Val
FROM db..EXT_ACXIOM_WUL_FILE A
LEFT JOIN (select distinct CURRENTLY_OPTED_IN_FL,
mid_key
from db..F_EMAIL) B
ON A.MID_KEY = B.MID_KEY
【讨论】:
【参考方案3】:我想这可能就是你要找的东西
SELECT COUNT(distinct(CURRENTLY_OPTED_IN_FL + F_EMAIL.MID_KEY)) - count(distinct(EXT_ACXIOM_WUL_FILE.MID_KEY))
FROM EXT_ACXIOM_WUL_FILE
LEFT OUTER JOIN F_EMAIL
ON JOIN F_EMAIL.MID_KEY = EXT_ACXIOM_WUL_FILE.MID_KEY
【讨论】:
以上是关于在 SQL 中获取两个计数的差异的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQL 获取 2 列之间日期差异的计数(值的分布)?
查找计数差异 - Microsoft Access 和 SQL