【问题标题】:SQL summarise based on conditionSQL 根据条件汇总
【发布时间】:2019-06-12 15:31:34
【问题描述】:

假设我有一个名为Table1 的表,其中包含VALUECODETYPE 三列。 VALUE 列包含不同问题的 1-4 分。 CODE 列包含与问题相关的代码。 TYPE 列指示问题是论文 (PAP) 调查还是在线 (ONL) 调查的一部分。

这是表格的外观。

#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...

我的目标

使用 SQL 查询 (Oracle) 总结此表,这样-

1) 我首先计算CODE的所有12第二季度

2) 然后将该数字除以第二季度的个值

3) 按TYPE 对结果进行分组,以便我对ONLPAP 的结果进行分组。

预期结果

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 你得到的输出是什么?
  • 提供创建和插入语句会有所帮助
  • 预期输出中的数字是否附加到错误的类型?不应该是PAP 1ONL 0.625吗?

标签: sql oracle aggregate summarize


【解决方案1】:

你可以这样做:

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

【讨论】:

    【解决方案2】:

    有几种方法可以做到这一点。
    您的查询的问题在于您没有执行第二步 - 获取 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
    

    【讨论】:

      【解决方案3】:

      这里是:

      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
      )
      

      【讨论】:

        猜你喜欢
        • 2021-06-28
        • 1970-01-01
        • 1970-01-01
        • 2019-03-06
        • 1970-01-01
        • 1970-01-01
        • 2021-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多