Создайте представление PostgreSQL для подачи в инструмент создания диаграмм с опцией фильтра - PullRequest
0 голосов
/ 06 мая 2019

Нам нужно создать представление Postgres SQL для создания диаграммы.Инструмент создания диаграмм допускает использование только одного SQL-представленияВ диаграмме есть опция фильтра по имени студента, cousecode и feecode.Помимо отображения диаграммы, нам нужно показать сумму общей стоимости курса и суммы оплаты, уплаченной всеми студентами из одного представления.

table1: student
id  name    address
1   John    USA
2   Robert  UK
3   Tinger  NZ
table2: student_course

id  std_id  coursecode  fee
1   1       CHEM        3000 
2   1       PHY         4000
3.  1       BIO         2000
4.  2       CHEM        3000
5.  2       GEO         1500
6.  3       ENG         2000
table3: student_fees
id  std_name    coursecode  feecode     amount
1   1           CHEM        BKFEE       100
2   1           CHEM        SPFEE       140
3   1           CHEM        MATFEE      250
4   1           PHY         BKFEE       150
5   1           PHY         SPFEE       200
6   1           BIO         LBFEE       300
7   1           BIO         MATFEE      350
9   1           BIO         TECFEE      200
10  2           CHEM        BKFEE       100
11  2           CHEM        SPFEE       140
12  2           GEO         BKFEE       150
13  3           ENG         BKFEE       75
14  3           ENG         SPFEE       140
15  3           ENG         LBFEE       180

В состоянии создатьсмотреть как это.Но этого представления недостаточно для моей работы.Потому что с этой точки зрения я не мог рассчитать сумму общей стоимости курса (плата за курс повторяется).В этом случае группировка не будет работать.Из-за необходимости фильтровать данные по имени студента, коду курса и коду оплаты.

View: 

id  std_id  coursecode  course_fee  feecode     fee_amount
1   John    CHEM        3000        BKFEE       100
2   John    CHEM        3000        SPFEE       140
3   John    CHEM        3000        MATFEE      250
4   John    PHY         4000        BKFEE       150
5   John    PHY         4000        SPFEE       200
6   John    BIO         4000        LBFEE       300
7   John    BIO         4000        MATFEE      350
8   John    BIO         4000        TECFEE      200
9   Robert  CHEM        3000        BKFEE       100
10  Robert  CHEM        3000        SPFEE       140
11  Robert  GEO         1500        BKFEE       150
12  Tinger  ENG         2000        BKFEE       75
13  Tinger  ENG         2000        SPFEE       140
14  Tinger  ENG         2000        LBFEE       180

Итак, каким-либо образом мы можем создать такое представление?

View: 
id  std_id  coursecode  course_fee  feecode     fee_amount
1   John    CHEM        3000        BKFEE       100
2   John    CHEM        0           SPFEE       140
3   John    CHEM        0           MATFEE      250
4   John    PHY         4000        BKFEE       150
5   John    PHY         0           SPFEE       200
6   John    BIO         4000        LBFEE       300
7   John    BIO         0           MATFEE      350
8   John    BIO         0           TECFEE      200
9   Robert  CHEM        3000        BKFEE       100
10  Robert  CHEM        0           SPFEE       140
11  Robert  GEO         1500        BKFEE       150
12  Tinger  ENG         2000        BKFEE       75
13  Tinger  ENG         0           SPFEE       140
14  Tinger  ENG         0           LBFEE       180

Любая помощь приветствуется ...

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Не похоже на ожидаемый ответ, но вы можете изучить ГРУППОВОЙ КОМПЛЕКТ

select name, sf.coursecode, amount, sum(fee)
from student s, student_course sc, student_fees sf
where s.id = sc.std_id
and sf.std_name = s.id
and sf.coursecode = sc.coursecode
group by 
        GROUPING SETS (
        (name, sf.coursecode, amount, fee),
        (name, sf.coursecode, fee),
        ()
    )
order by name, sf.coursecode asc
0 голосов
/ 06 мая 2019

Я полагаю, вы ищете функциональность свертки в запросе просмотра. Я показываю вам 2 ссылки. Первая из них посвящена основам работы свертки, а вторая относится к Postgresql первая ссылка , вторая ссылка Надеюсь, это поможет вам

У меня есть одна демонстрация для вас, пожалуйста, проверьте накопительный запрос

...