oracle sql计数多列

时间:2011-05-27 19:52:08

标签: sql oracle aggregate-functions

我想计算sql中具有特定值的列数。示例:

A B C D E
1 2 1 2 2

如何计算有3列具有值2.

2 个答案:

答案 0 :(得分:6)

您可以使用解码:

Select decode(a, 2, 1, 0) 
  + decode(b, 2, 1, 0) 
  + decode(c, 2, 1, 0) 
  + decode(d, 2, 1, 0) 
  + decode(e, 2, 1, 0) 
from my_tab

替代使用案例:

Select (case a when 2 then 1 else 0 end) 
  + (case b when 2 then 1 else 0 end) 
  + (case c when 2 then 1 else 0 end)  
  + (case d when 2 then 1 else 0 end)  
  + (case e when 2 then 1 else 0 end) 
from my_tab

答案 1 :(得分:1)

为了让Frank Schmitt更进一步,你可以在一个内联表中收集“你想要计算的值”以避免重复它:

Select
    decode(a, countthis.countvalue, 1, 0) 
  + decode(b, countthis.countvalue, 1, 0) 
  + decode(c, countthis.countvalue, 1, 0) 
  + decode(d, countthis.countvalue, 1, 0) 
  + decode(e, countthis.countvalue, 1, 0) 
from
  my_tab
 ,(select 2 as countvalue from dual) countthis