Может ли этот sql запрос быть написан лучше - PullRequest
0 голосов
/ 21 марта 2020

Я получил этот запрос SQL, и мне было интересно, есть ли лучший способ написания запросов.

Запрос ниже создает первую таблицу и выбирает атрибуты, где cacount = 1, second_ca выбирает атрибут, где cacount = 2, экзамены выбирают атрибуты из таблицы экзаменов. Наконец, создайте таблицу суммарных оценок, которая объединяет оценки из схем first_ca и second_ca. Схемы

WITH
  first_ca AS (
  SELECT
    studentid,
    name,
    subject,
    classroom,
    session,
    term,
    cacount,
    score
  FROM
    analysis.catable
  WHERE
    cacount = 1 ),
  second_ca AS (
  SELECT
    studentid,
    name,
    subject,
    classroom,
    session,
    term,
    cacount,
    score
  FROM
    analysis.catable
  WHERE
    cacount = 2 ),
  exam AS (
  SELECT
    studentid,
    name,
    subject,
    classroom,
    session,
    term,
    score
  FROM
   analysis.exams ),
  total_scores AS (
  SELECT
    fca.studentid AS Studentid,
    fca.name AS Name,
    fca.subject AS Subject,
    fca.classroom AS Classroom,
    fca.term AS Term,
    fca.session AS Session,
    fca.score AS First_CA,
    sca.score AS Second_CA,
    ROUND(fca.score + sca.score, 2) AS Total_CA,
    ex.score AS Exam,
    ROUND(fca.score + sca.score + ex.score, 2) AS Total_Score
  FROM
    exam AS ex
  JOIN
    first_ca AS fca
  ON
    ex.studentid = fca.studentid
    AND ex.name = fca.name
    AND lower(ex.subject)=lower(fca.subject)
    AND ex.session=fca.session
    AND ex.term=fca.term
  JOIN
    second_ca AS sca
  ON
    ex.studentid = sca.studentid
    AND ex.name = sca.name
    AND lower(ex.subject)=lower(sca.subject)
    AND ex.session=sca.session
    AND ex.term=sca.term
  ORDER BY
    ex.classroom )

для обеих таблиц:

table_name:catable

id          INTEGER NULLABLE    
name        STRING  NULLABLE    
studentid   INTEGER NULLABLE    
score       FLOAT   NULLABLE    
subject     STRING  NULLABLE    
account     INTEGER NULLABLE    
classroom   STRING  NULLABLE    
term        INTEGER NULLABLE    
session     STRING  NULLABLE

table_name:exams

id           INTEGER    NULLABLE    
name         STRING     NULLABLE    
studentid    INTEGER    NULLABLE    
score        FLOAT      NULLABLE    
subject      STRING     NULLABLE    
classroom    STRING     NULLABLE    
term         INTEGER    NULLABLE    
session      STRING     NULLABLE    

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