試圖在MySQL中編寫一個查詢,該查詢需要執行由特定deviceToken
執行的4個不同操作,並在特定時間範圍內並返回action
,deviceToken
和count
採取了多少次這一行動。我的問題是,爲了正確處理結果,我總是需要所有4個動作成爲回報的一部分,即使計數爲0,並且GROUP BY
臭名昭着地不會與此一起玩。下面是該查詢我目前:當GROUP BY不產生匹配時,返回一行數爲0
SELECT `action`,
deviceToken,
CASE WHEN `action` = 'calendar' THEN COUNT(*) END AS CalCount,
CASE WHEN `action` = 'closinginfo' THEN COUNT(*) END AS CloseingCount,
CASE WHEN `action` = 'generalinfo' THEN COUNT(*) END AS GenInfoCount,
CASE WHEN `action` = 'login' THEN COUNT(*) END AS LoginCount
FROM `action`
WHERE deviceToken = '44262f82-3767-49c8-8786-ee377ea00a64'
AND (`action` = 'login' OR `action` = 'calendar' OR `action` = 'closinginfo' OR `action` = 'generalinfo')
AND `timestamp` > CONCAT(DATE(NOW()),' 23:59:59') - INTERVAL DAYOFWEEK(NOW())+14 DAY
AND `timestamp` < CONCAT(DATE(NOW()),' 23:59:59') - INTERVAL DAYOFWEEK(NOW())+7 DAY
GROUP BY `action`
對於已經在這一時限內完成所有4個動作deviceToken
,結果是這樣的:
的方式我的客戶端處理這個結果已經很完美了。然而,已經採取少於所有4個動作deviceToken
看起來是這樣的:
我需要爲我的數據處理,以普遍的工作仍然是返回那些失蹤行,但只列出那些算作0.有沒有人有任何想法如何做到這一點?
當你在第一列中有動作時,你是否真的需要計算不同列的不同動作? – Barmar