2011-10-17 27 views
2

我在Netezza中做了一些QA,我需要比較兩個單獨的SQL語句的計數。這是我目前使用的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不像那樣工作。當計數匹配時,而不是返回0,這將爲Record_count返回null。我基本上計算的記錄數爲:

record_count=count1-count2 

因此,如果計數是相等的,否則爲0。什麼是正確的SQL呢?

回答

3
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

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 
0

我想這可能是你在找什麼

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