0
我有一個查詢返回一些數據的罪狀,但我不希望有一個null值的數據...MySQL的 - 衝突的WHERE和GROUP BY語句
舉個例子,代碼滾動統計從點擊系統到表格。
SELECT sh.dropid,
COUNT(DISTINCT IF(sh2.`SentDate` IS NOT NULL, sh2.`subid`, NULL)) AS sentCount,
COUNT(DISTINCT IF(sh2.`Open` = 1, sh2.`subid`, NULL)) AS openCount,
COUNT(DISTINCT IF(sh2.`Click` = 1, sh2.`subhistid`, NULL)) AS clickCount,
COUNT(DISTINCT IF(sh2.`Bounced` = 1, sh2.`subid`, NULL)) AS bounceCount,
COUNT(DISTINCT IF(sh2.`Unsubscribed` = 1, sh2.`subid`, NULL)) AS unsubCount,
COUNT(DISTINCT IF(sh2.`Abuse` = 1, sh2.`subid`, NULL)) AS abuseCount
FROM subscriberhistory sh
INNER JOIN subscriberhistory sh2 ON sh.subid = sh2.subid
WHERE sh.SentDate >= '#runDate# #lastRunTime#'
AND sh.dropid IS NOT NULL
AND sh.dropid != ""
OR (sh.SentDate IS NULL AND sh.OpenDate >= '#runDate# #lastRunTime#')
OR (sh.SentDate IS NULL AND sh.ClickDate >= '#runDate# #lastRunTime#')
OR (sh.SentDate IS NULL AND sh.UnsubscribeDate >= '#runDate# #lastRunTime#')
OR (sh.SentDate IS NULL AND sh.BouncedDate >= '#runDate# #lastRunTime#')
OR (sh.SentDate IS NULL AND sh.AbuseDate >= '#runDate# #lastRunTime#')
GROUP BY dropid
ORDER BY sentCount DESC
編輯:更正查詢
SELECT sh.dropid,
COUNT(DISTINCT IF(sh2.`SentDate` IS NOT NULL, sh2.`subid`, NULL)) AS sentCount,
COUNT(DISTINCT IF(sh2.`Open` = 1, sh2.`subid`, NULL)) AS openCount,
COUNT(DISTINCT IF(sh2.`Click` = 1, sh2.`subid`, NULL)) AS clickCount,
COUNT(DISTINCT IF(sh2.`Bounced` = 1, sh2.`subid`, NULL)) AS bounceCount,
COUNT(DISTINCT IF(sh2.`Unsubscribed` = 1, sh2.`subid`, NULL)) AS unsubCount,
COUNT(DISTINCT IF(sh2.`Abuse` = 1, sh2.`subid`, NULL)) AS abuseCount
FROM subscriberhistory sh
INNER JOIN subscriberhistory sh2 ON sh.subid = sh2.subid
WHERE sh.dropid IS NOT NULL AND sh.dropid != ""
AND ((sh.SentDate >= '2012-04-10 14:15')
OR (sh.SentDate IS NULL AND sh.OpenDate >= '2012-04-10 14:15')
OR (sh.SentDate IS NULL AND sh.ClickDate >= '2012-04-10 14:15')
OR (sh.SentDate IS NULL AND sh.UnsubscribeDate >= '2012-04-10 14:15')
OR (sh.SentDate IS NULL AND sh.BouncedDate >= '2012-04-10 14:15')
OR (sh.SentDate IS NULL AND sh.AbuseDate >= '2012-04-10 14:15'))
GROUP BY sh.dropid
ORDER BY sentCount DESC
返回是這樣的記錄集的例子...
(dropid) sent opens clicks
400 2 3 4
401 2 3 6
NULL 2 3 4
同樣,我們的目標是保持NULL數據出來以前的記錄集。有人可以向我解釋爲什麼這種行爲正在發生以及如何解決它。
自我內連接的目的是什麼?既然你在兩個實例中加入同一列,它將不會執行任何操作。你還沒有在查詢的其他地方引用'sh2'。 – 2012-04-10 23:31:57
好的,在你的輸出中提到的字段標題 – Starx 2012-04-10 23:32:35
它用於計數。如果我理解正確,MySQL可以建立一個表格,對它進行操作,並在比實際表格操作更短的時間內返回記錄集。一定要告訴我,如果我錯了......我也認爲這個連接可能導致了空記錄的返回,但我在同一張表上進行了分組和過濾,所以我對此表示懷疑。 – TaylorPLM 2012-04-10 23:34:22