数据库中有模式学生(名称为TEXT,分数为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;
答案 0 :(得分:3)
请勿使用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
您需要非常注意between
的情况,以使得分“ 4”不会同时被视为“ A”和“ B”(就像let i = 0, ta, co;
const tuples = [];
while ((ta = localStorage.getItem('ts_ta_' + ++i)) && (co = localStorage.getItem('ts_co_' + i))) {
tuples.push(`(${ta}, ${co})`);
}
console.log(tuples.join(' '));
那样)。 / p>
答案 1 :(得分:1)
您需要使用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