Улей SQL - условный счет - PullRequest
       12

Улей SQL - условный счет

0 голосов
/ 02 марта 2020

У меня проблема с этим условным подсчетом, и я застрял здесь на один день! Надеюсь найти решение здесь от вас всех. Итак, у меня есть таблица оценок, которая состоит из трех столбцов: 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 в списке для grand_subject и каждого предмета {процент оценки = количество 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

Но вывод выглядит странно, а не то, что он должен был быть. Есть ли какие-то решения для этого? Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...