Oracle SQL计数col值

时间:2017-06-16 10:02:57

标签: sql oracle

我的数据库看起来像这样:

+-----+----------+-----------+----------+
+ ID  +   col1   +   col2    +  col 3   +
+-----+----------+-----------+----------+
+  1  +    Y     +    N      +     Y    +
+-----+----------+-----------+----------+

我想要的是Y与N相比的优势,例如: Y = 2,N = 1 - > 75%

我可以在SQL中执行此操作吗?

2 个答案:

答案 0 :(得分:1)

我会这样说:

select ID,
       floor((case when col1 = Y then 1 else 0 end +
              case when col2 = Y then 1 else 0 end +
              case when col3 = Y then 1 else 0 end)* 100 / 3) as pc_Y
from MyTable

答案 1 :(得分:0)

解码可以做到。但正如已经问过评论中NULL值的内容,我假设NULL可以存在,并且所有值都可能既不是'X'也不是'Y'。

SELECT ID,
       DECODE (xy_val,
               0, 'N/A',
               ROUND ((y_val / x_val) * 100)
              ) y_to_x_percent
  FROM (SELECT ID,
               (  DECODE (NVL (col1, 0), 'Y', 1, 0)
                + DECODE (NVL (col2, 0), 'Y', 1, 0)
                + DECODE (NVL (col3, 0), 'Y', 1, 0)
               ) y_val,
               (  DECODE (NVL (col1, 0), 'Y', 1, 'X', 1, 0)
                + DECODE (NVL (col2, 0), 'Y', 1, 'X', 1, 0)
                + DECODE (NVL (col3, 0), 'Y', 1, 'X', 1, 0)
               ) xy_val
          FROM my_table);