参数标准表stad,数据表data
stad
类型    评价  符号   值
type_a   好     <     5
type_a   中     >=    5
type_a   中     <     10
type_a   差     >=    10
type_b   好     <     25
type_b   中     >=    25
type_b   中     <     40
type_b   差     >=    40
......data
时间                 参数a    参数b  参数c (备用) ...
2011-01-01 01:00:00    4      30     ...
2011-01-01 01:02:00    7      40     ...
2011-01-01 01:05:17    6      20     ...
......type_a 表示参数a,type_b 表示参数b。现在想要求出对应评价的取值范围内的统计条数SQL语句该怎么写?即最后结果大概表示为
 类型  评价 条数
a类型  好  123
a类型  中  55
a类型  差  16
b类型  好  456
b类型  中  77
b类型  差  22
......不用存储过程拼语句只写一条SQL语句可以实现吗?

解决方案 »

  1.   

    row_number() partition
    可以解决的。
      

  2.   

    是否有办法把筛选的统计写出来?比如对于类型a,参数a好的范围是a<5
    在select 语句需要把"a<5"这个条件写出来,
    而参数a“中”的范围是5<=a<10,这两个范围不一样。
      

  3.   

    这个是难点之一,如果用存储过程写个动态sql语句再执行,还是可以达到想要的效果的,如果用普通的sql语句,目前不懂怎么实现
      

  4.   

    with t as(
    select 'type_a' 类型,
       case when 参数a < 5 then '好' 
        when 参数a >=5 and 参数a<10 then '中'
        else '差' end as 评价
    from data
    union all
    select 'type_b' 类型, 
       case when 参数b < 25 then '好' 
        when 参数b >=25 and 参数b<40 then '中'
        else '差' end as 评价
    from data
    )
    select 类型,评价,count(*) 条数
    from t
    group by 类型,评价---------------------
    感觉不用和stad表关联,直接把stad的判断关系写死在data里,造一个伪列。通过这个伪列做统计就可以。
      

  5.   

    我想到最多的就是动态语句……如果是有后台程序处理的把stad表读进来,再拼接语句,不懂其他方法。