SQL 根据条件汇总

SQL summarise based on condition

假设我有一个名为 Table1 的 table,它包含三列,VALUECODETYPEVALUE 列包含不同问题的 1-4 分。 CODE 列包含与问题相关的代码。 TYPE 列表示问题是纸质 (PAP) 还是在线 (ONL) 调查的一部分。

下面是 table 的一瞥。

#Table1

VALUE    CODE    TYPE
-----   ------  ------ 
  2      Q2      ONL 
  1      Q2      PAP
  3      Q2      ONL
  4      Q2      ONL
  1      Q2      ONL
  1      Q2      ONL
  1      Q2      PAP
  2      Q2      ONL
  4      Q2      ONL
  2      Q2      ONL
  3      Q1      ONL
  1      Q1      ONL
  4      Q1      ONL
  3      Q1      ONL
      and so on...

我的Objective

使用 SQL 查询 (Oracle) 来总结这个 table 这样-

1) 我首先 计算 所有值 1's2's 对于 CODE Q2

2) 然后将该数字除以 Q2

总数 个值

3) 按 TYPE 对结果进行分组,以便我对 ONLPAP.[=23 的结果进行分组=]

预期结果

所以在我们的例子中,这个查询的结果是 -

TYPE      SCORE
PAP       0.625 (5/8)
ONL       1     (2/2)

我的尝试

虽然这看起来很简单,但我似乎无法获得正确的值。我觉得这需要一个嵌套查询来存储不同的值,但我找不到正确的例子来指导我。这是我的错误尝试-

SELECT TYPE, VALUE/COUNT(VALUE) as SCORE FROM Table1
where
CODE = 'Q2' AND
VALUE in (1,2)
GROUP BY TYPE

任何帮助将不胜感激。

这里是:

select type, cnt_value/sum_value as score 
 FROM (
  SELECT type, count (value) as cnt_value , sum (value) as sum_value 
    FROM Table1
   WHERE
    CODE = 'Q2' AND
   VALUE in (1,2)
   GROUP by type
)

你可以简单地做:

select type, avg(case when value in (1, 2) then 1.0 else 0 end) 
from table1
where code = 'Q2'
group by type;

有几种方法可以做到这一点。
您查询的问题是您没有执行第二步 - 获取 Q2 的响应总数。

这是我的 SQLFiddle:http://www.sqlfiddle.com/#!9/898b3f/7

SELECT TYPE, 
COUNT(VALUE), 
(select count(*) from table1 where code = 'Q2') ,
COUNT(VALUE) / (select count(*) from table1 where code = 'Q2') as score
FROM Table1
where
CODE = 'Q2' AND
VALUE in (1,2)
GROUP BY TYPE