簡體   English   中英

用mysql sort顯示計數為0的行

[英]Displaying rows with count 0 with mysql sort

我想按列Tgl ,然后按UsiaUsia ,我希望我的空行顯示具有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM