SQL - 查找0到人口平均值之间的百分比

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL - 查找0到人口平均值之间的百分比相关的知识,希望对你有一定的参考价值。

我试图找到0和该组平均值之间的每个分组行的人口百分比。例如,在下面的查询中,假设我有一行,其中num_problems为100,平均值为70.总体中有58个值(对于该行),其值低于70.我想将值(58)提取为结果元组的一部分。

select
    tm.subject_name,
    tm.topic_name,
    pm.problem_type,
    count( pa.id ) as num_problems,
    avg( pa.duration ) as average ,
    stddev( pa.duration )
from
    problem_attempt pa,
    problem_master pm,
    topic_master tm
where
    pa.problem_id = pm.id and
    pm.topic_id = tm.id and
    pa.outcome = 'Solved' and
    pa.duration > 10 and 
    pa.duration < 1000 and
    pm.problem_type = 'SCA'
group by
    tm.subject_name,
    tm.topic_name,
    pm.problem_type ;
答案

切勿在FROM条款中使用逗号。始终使用正确,明确,标准的JOIN语法。

您需要聚合两次或使用窗口函数。

我建议:

select subject_name, topic_name, problem_type,
       count(*) as num_problems,
       average ,
       stddev( pa.duration ),
       sum(case when pa_duration < average then 1 else 0 end) as num_less_than_average
from (select tm.subject_name, tm.topic_name, pm.problem_type,
             avg( pa.duration ) over (partition by tm.subject_name, tm.topic_name, pm.problem_type) as average
      from problem_attempt pa join
           problem_master pm
           on pa.problem_id = pm.id
           topic_master tm
           on pm.topic_id = tm.id
      where pa.outcome = 'Solved' and
            pa.duration > 10 and 
            pa.duration < 1000 and
            pm.problem_type = 'SCA'
     ) x
group by subject_name, topic_name, problem_type, average ;

以上是关于SQL - 查找0到人口平均值之间的百分比的主要内容,如果未能解决你的问题,请参考以下文章

Sql查询以查找两个给定日期之间的视图百分比差异

如何在sql查询访问中计算所有子县的每个县的平均人口?

如何使用 SQL 从字典查找值中获取平均值?

SQL:查找按用户分组的最新两个记录之间的差异

sql查找数据并计算平均值

PYSPARK :查找不包括前 1 个百分位数据的变量的平均值