2

我在 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?

4

3 回答 3

4
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 MINUSEXCEPT在 SQL Server 中)是完全不同的动物 :)

如果你理解UNION然后思考集合,你就会明白MINUS/EXCEPT

于 2011-10-17T20:54:37.423 回答
1

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  
于 2011-10-17T20:55:06.580 回答
1

我认为这可能是您正在寻找的

    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
于 2011-10-17T21:09:13.013 回答