PostgreSQL,SELECT CASE COALESCE

Win*_*Too 3 sql postgresql aggregate case

我需要"名"类:mycat是一个text可能的值列'0''4'.

SELECT CASE mycat                                       
       WHEN '0' THEN 'ZERO'                         
       WHEN '1' THEN 'ONE'                      
       WHEN '2' THEN 'TWO'                      
       WHEN '3' THEN 'THREE'                        
       WHEN '4' THEN 'OTHER'        
   END AS my_category,
   COALESCE(SUM(col1), 0), 
   COALESCE(SUM(col2), 0), 
   COALESCE(SUM(col3), 0) 
   FROM mytable 
GROUP BY mycat 
ORDER BY mycat;
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我的程序中有一些错误很少写null(或者''我在pgAdmin中可以看到).在这种情况下,我不得不把那个''一样'0'.但我不能那样做!

我试着这样:

SELECT CASE COALESCE(mycat, '0')
Run Code Online (Sandbox Code Playgroud)

但这根本无法解决.
如何得到''它将与'0'类别相加并组合在一起?

PostgreSQL 9.3,Windows.

rad*_*dar 6

您需要在使用COALESCE group byorder by也类似于你打算如何改变case表情,但Postgres的是给误差,所以另一种选择是包装你的语句子查询和做group by

SELECT my_category, 
       COALESCE(SUM(col1), 0), 
       COALESCE(SUM(col2), 0), 
       COALESCE(SUM(col3), 0) 
FROM
(
SELECT CASE coalesce(mycat ,'0')                                     
       WHEN '0' THEN 'ZERO'                         
       WHEN '1' THEN 'ONE'                      
       WHEN '2' THEN 'TWO'                      
       WHEN '3' THEN 'THREE'                        
       WHEN '4' THEN 'OTHER' 
       WHEN '' THEN 'ZERO'       
   END AS my_category,
   col1,
   col2,
   col3
   FROM mytable 
) T
GROUP BY my_category
ORDER BY my_category
Run Code Online (Sandbox Code Playgroud)