[英]Displaying rows with count 0 with mysql sort
我想按列Tgl
,然后按Usia
列Usia
,我希望我的空行顯示具有0值的行而不是跳過它,我想記錄我所有的行,即使它們為空
可以說:我沒有日期='2017-09-02'的行數據,我想將其顯示為0值,如果跳過它,則代碼為:
SELECT CONCAT(DAY(`date`),' ',MONTHNAME(`date`),' ',YEAR(`date`)) AS Tgl,t.Usia, t.jmlCust
FROM(
SELECT '<20' AS Usia ,COALESCE(COUNT(*),0) AS jmlCust, `date` FROM getpoint gp
LEFT JOIN customer cs ON gp.CardID = cs.CardID
WHERE (YEAR(NOW())-YEAR(cs.tanggallahir))<20
AND nominalbelanja <> 0
GROUP BY DAY(gp.date)
UNION
SELECT '20-35' AS Usia ,COALESCE(COUNT(*),0) AS jmlCust, `date` FROM getpoint gp
LEFT JOIN customer cs ON gp.CardID = cs.CardID
WHERE (YEAR(NOW())-YEAR(cs.tanggallahir)) BETWEEN 20 AND 35
AND nominalbelanja <> 0
GROUP BY DAY(gp.date)
UNION
SELECT '36-50' AS Usia ,COALESCE(COUNT(*),0) AS jmlCust, `date` FROM getpoint gp
LEFT JOIN customer cs ON gp.CardID = cs.CardID
WHERE (YEAR(NOW())-YEAR(cs.tanggallahir)) BETWEEN 36 AND 50
AND nominalbelanja <> 0
GROUP BY DAY(gp.date)
UNION
SELECT 'TOTAL' AS Usia ,COALESCE(COUNT(*),0) AS jmlCust,`date` FROM getpoint gp
LEFT JOIN customer cs ON gp.CardID = cs.CardID
WHERE nominalbelanja <> 0
GROUP BY DAY(gp.date)
ORDER BY `date`
) t
如下創建一個臨時表,
create table test1(
Usia varchar(10));
insert into test1 values ('<20'),('20-35'),('36-50'),('TOTAL');
現在將join與您的結果表一起應用。
SELECT CONCAT(DAY(`date`),' ',MONTHNAME(`date`),' ',YEAR(`date`)) AS Tgl,test1.Usia, ifnull(t.jmlCust,0)
FROM(
SELECT '<20' AS Usia ,COALESCE(COUNT(*),0) AS jmlCust, `date` FROM getpoint gp
LEFT JOIN customer cs ON gp.CardID = cs.CardID
WHERE (YEAR(NOW())-YEAR(cs.tanggallahir))<20
AND nominalbelanja <> 0
GROUP BY DAY(gp.date)
UNION
SELECT '20-35' AS Usia ,COALESCE(COUNT(*),0) AS jmlCust, `date` FROM getpoint gp
LEFT JOIN customer cs ON gp.CardID = cs.CardID
WHERE (YEAR(NOW())-YEAR(cs.tanggallahir)) BETWEEN 20 AND 35
AND nominalbelanja <> 0
GROUP BY DAY(gp.date)
UNION
SELECT '36-50' AS Usia ,COALESCE(COUNT(*),0) AS jmlCust, `date` FROM getpoint gp
LEFT JOIN customer cs ON gp.CardID = cs.CardID
WHERE (YEAR(NOW())-YEAR(cs.tanggallahir)) BETWEEN 36 AND 50
AND nominalbelanja <> 0
GROUP BY DAY(gp.date)
UNION
SELECT 'TOTAL' AS Usia ,COALESCE(COUNT(*),0) AS jmlCust,`date` FROM getpoint gp
LEFT JOIN customer cs ON gp.CardID = cs.CardID
WHERE nominalbelanja <> 0
GROUP BY DAY(gp.date)
ORDER BY `date`
) t right join test1 on (test1.Usia = t.Usia);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.