Получение разницы двух значений в SQL - PullRequest
2 голосов
/ 18 октября 2011

Я провожу некоторое тестирование в Netezza, и мне нужно сравнить количество из двух отдельных операторов 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

Однако кажется, что МИНУС не работает так. Когда количество совпадений совпадает, вместо возврата 0, для Record_count возвращается ноль. Я в основном счет записи, которая будет рассчитана как:

record_count=count1-count2

Так что это 0, если счет равен или разница в противном случае. Какой правильный SQL для этого?

Ответы [ 3 ]

3 голосов
/ 18 октября 2011
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 (EXCEPT в SQL Server) - это совершенно другое животное:)

Если вы понимаете UNION и затем думаете, что наборы, вы поймете MINUS / EXCEPT

1 голос
/ 18 октября 2011

Я думаю, это может быть то, что вы ищете

    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
1 голос
/ 18 октября 2011

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  
...