条件计数

ohtdti5x  于 2021-06-25  发布在  Hive
关注(0)|答案(0)|浏览(277)

我有一个问题,在这个条件计数和被困在这里一天!希望能从你们这里找到解决办法。所以我有一个等级表,它有三列:1。大科目2。主题(这是大主题的细分)3。等级

Grand_subject      Subject          Grade
-------------------------------------------------------
    Discrete Math   Discrete Math 1      A
                                         B
                                         B
                                         A
                                         A
                                         B
------------------------------------------------------
    Statistics       Statistics 1        A
                                         B
                                         B
                                         A
                                         A
-------------------------------------------------------
    Physics         Physics Basic        A
                                         A
                                         A
                                         B
                     ----------------------------------
                      Physics 1          B
                                         B
                                         B
                                         A
                     ----------------------------------
                      Physics 2          A
                                         A
                                         B
-------------------------------------------------------
    History           History 1          B
                                         A
                                         A
                                         B
                     ----------------------------------
                      History 2          A
                                         A
                                         B
                                         B

所以,我要做的是,我要计算大科目和每门科目的成绩百分比{a成绩百分比=多少a除以多少a+b成绩(多少a/(多少a+多少b)*100%}。有以下两条规则:1)。对于离散数学和统计学这两大学科,成绩计算应结合数学;然而,对于其他大科目将单独计算(物理,历史)2)。对于科目栏,应为每个科目单独计算成绩。
预期输出如下:

A_Grade_Percentage
-----------------------------------------------------------------
    Maths (Discrete Math + Statistics)         54.50%
    Discrete Math 1                             50%
    Statistics 1                                60%
-----------------------------------------------------------------
    Physics                                   54.50%
    Physics Basic                               75%
    Physics 1                                   25%
    Physics 2                                 66.70%
-----------------------------------------------------------------
    History                                     50%
    History 1                                   50%
    History 2                                   50%
-----------------------------------------------------------------
    Geography                                   25%

到目前为止,我已经尝试了这么长的代码:

with on_grand_subject as(
select
case when grand_subject in ('Discrete Math', 'Statistics') then 'Maths'
     else grand_subject end as grand_subject,
count(case when grade = 'A' then 1 else 0 end) as A_Grade,
100.0*count(case when grade = 'A' then 1 else 0 end) / 
   (count(case when grade = 'A' then 1 else 0 end) + count(case when grade = 'B' then 1 else 0 end)) 
   as A_Grade_percentage,
from
grade_table
where
 ...................
group by grand_subject in ('Discrete Math', 'Statistics') then 'Maths' else grand_subject end
order by grand_subject
limit 1000
),

on_subject as(
select
grand_subject,
subject,
count(case when grade = 'A' then 1 else 0 end) as A_Grade,
100.0*count(case when grade = 'A' then 1 else 0 end) / 
   (count(case when grade = 'A' then 1 else 0 end) + count(case when grade = 'B' then 1 else 0 end)) 
   as A_Grade_percentage,
from
grade_table
where
 ...................
group by grand_subject, subject
order by subject
limit 1000
)

select
g.grand_subject, s.subject, g.A_Grade, g.A_Grade_percentage, s.A_Grade, g.A_Grade_percentage
from on_grand_subject g join on_subject s on g.grand_subject = s.grand_subject

但是输出看起来很奇怪,并不是它应该的样子。有什么解决办法吗?非常感谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题