#sql #netezza
#sql #netezza
Вопрос:
Я выполняю некоторый контроль качества в 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 это вернет null для Record_count . Я в основном подсчитываю количество записей, которое должно быть вычислено как:
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
( EXCEPT
в SQL Server) — это совершенно другое животное 🙂
Если вы понимаете 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