使用mysql排序显示计数为0的行

时间:2017-10-10 09:31:01

标签: mysql

我想按列Tgl排序,然后按列Usia排序,我希望我的空行显示0值的行而不是跳过它,我想记录我的所有行,即使他们无效

让我们说: 我没有关于date ='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

1 个答案:

答案 0 :(得分:0)

创建一个临时表,如下所示,

create table test1( 
Usia varchar(10)); 
insert into test1 values ('<20'),('20-35'),('36-50'),('TOTAL');

现在将结果应用于结果表。

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);