代码之家  ›  专栏  ›  技术社区  ›  Varun

基于条件的SQL摘要

  •  -1
  • Varun  · 技术社区  · 6 年前

    假设我有一张叫 Table1 包含三列, VALUE , CODE TYPE . 专栏 价值 包含不同问题的1-4分。专栏 代码 包含与问题相关的代码。专栏 类型 指示问题是纸张(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) 我首先 计数 所有值都是 1的 2的 对于 代码 Q2

    2) 把这个数字除以 全部的 q2的值数

    3)结果分组依据 类型 这样我就可以对两个结果进行分组 ONL 帕帕 .

    预期结果

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

    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
    

    任何帮助都将不胜感激。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Neville Kuyt    6 年前

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

    这是我的小提琴: 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
    
        2
  •  3
  •   Gordon Linoff    6 年前

    您只需执行以下操作:

    select type, avg(case when value in (1, 2) then 1.0 else 0 end) 
    from table1
    where code = 'Q2'
    group by type;
    
        3
  •  1
  •   Ted at ORCL.Pro Marimuthu Palanisamy    6 年前

    这里是:

    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
    )