[英]Getting all value from every month, put zero if no data of that month
我正在嘗試獲取每個月的數據,如果沒有找到特定月份的數據,我將置零。 我已經創建了一個日歷表,所以我可以離開加入它,但我仍然無法得到零。
這是我的查詢
SELECT calendar.month, IFNULL(SUM(transaction_payment.total),0) AS total
FROM `transaction`
JOIN `transaction_payment` ON `transaction_payment`.`trans_id` =
`transaction`.`trans_id`
LEFT JOIN `calendar` ON MONTH(transaction.date_created) = calendar.month
WHERE`date_created` LIKE '2017%' ESCAPE '!'
GROUP BY calendar.month
ORDER BY `date_created` ASC
我的日歷表中的值為 1-12(Jan-Dec) int
結果應該是這樣的
month total
1 0
2 20
3 0
4 2
..
11 0
12 10
更新
問題似乎是 SUM 函數
SELECT c.month, COALESCE(t.trans_id, 0) AS total
FROM calendar c
LEFT JOIN transaction t ON month(t.date_created) = c.month AND year(t.date_created) = '2018'
LEFT JOIN transaction_payment tp ON tp.trans_id = t.trans_id
ORDER BY c.month ASC
我嘗試只顯示 ID 並且運行良好。 但是當我加回這個功能時。 我只能得到幾個月的價值。
COALESCE(SUM(tp.total), 0);
這解決了您的查詢問題:
SELECT c.month, COALESCE(SUM(tp.total), 0) AS total
FROM calendar c LEFT JOIN
transaction t
ON month(t.date_created) = month(c.month) AND
year(t.date_created) = '2017' LEFT JOIN
transaction_payment tp
ON tp.trans_id = t.trans_id
GROUP BY c.month
ORDER BY MIN(t.date_created) ASC;
這僅在“日歷”表每月有一行時才有效——這看起來很奇怪,但這可能是您的數據結構。
注意變化:
calendar
表開始,因為這些是您要保留的行。LIKE
。 MySQL 有適當的date
函數。 使用它們。ON
子句中,而不是在WHERE
子句中。COALESCE()
到IFNULL()
因為COALESCE()
是 ANSI 標准。您需要根據您的查詢使用權限,因為您的日歷表位於右側
SELECT calendar.month, IFNULL(SUM(transaction_payment.total),0) AS total
FROM `transaction`
JOIN `transaction_payment` ON `transaction_payment`.`trans_id` =
`transaction`.`trans_id`
RIGHT JOIN `calendar` ON MONTH(transaction.date_created) = calendar.month
WHERE`date_created` LIKE '2017%' ESCAPE '!'
GROUP BY calendar.month
ORDER BY `date_created` ASC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.