Как объединить значения в таблице - PullRequest
0 голосов
/ 07 февраля 2019

В базе данных есть студенты схемы (имя ТЕКСТ, оценка INTEGER), и есть таблица с оценками:

Grade   MIN_score    MAX_score
A       4            5
B       3            4
C       2            3

Я хочу выбрать имена всех студентов и их оценки в соответствии с таблицейи поверните A и B, чтобы «пройти» в полученной таблице.

Ниже приведено мое частичное решение, не поворачивая A и B для «прохода» в результирующей таблице, и мне интересно, как выполнить эту дополнительную функцию.

SELECT name, grade
FROM students 
LEFT JOIN grades 
ON grade BETWEEN MIN_score and MAX_score;

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Не используйте between.Вы получите дубликаты.

select s.name, s.score,
       (case when g.grade in ('A', 'B') then 'Pass' end) as status
from students s join
     grades g
     on s.score > g.MIN_score and s.score <= MAX_score;

Вы должны быть очень осторожны с условием join, чтобы оценка «4» не рассматривалась как «A» и «B» (как это делает between).

0 голосов
/ 07 февраля 2019

Вам нужно использовать выражение case when, например:

select case when grade in ('A', 'B') then 'Pass' else '' end

Я считаю, что ваш запрос должен выглядеть примерно так:

select name, score, case when grade in ('A', 'B') then 'Pass' else '-' end
from students
join grades on score between MIN_score and MAX_score
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...