Функция SQL IN и выберите не соответствующие критериям - PullRequest
0 голосов
/ 31 мая 2019

Использование предложения SQL IN для получения баллов учащихся по данной оценке, например, 1,2,3,4 по чтению.Учащийся может не получить баллы, которые имеют 4. Есть ли способ выбрать несоответствующее условие В предложении SQL

Вот запрос

select
score, 
count(*) as [countTimes]
from ScoresTable
where  score IN (1,2,3,4)

Оценка

Если ученик никогда не получал 4, мне нужно создать строку, например 4,0 примера набора результатов

Score Count
1       2
2       3
3       1
4       0

, в текущем запросе используется предложение IN.Если нет записей, соответствующих предложению IN, строка не отображается

Score Count
1       2
2       3
3       1
4       0

Ответы [ 3 ]

2 голосов
/ 31 мая 2019

Вы ищете left join:

select v.score, count(s.score) as [countTimes]
from (values (1), (2), (3), (4)
     ) v(score) left join
     ScoresTable s
     on s.score = v.score
group by v.score;
1 голос
/ 31 мая 2019

Если у вас нет таблицы с доступными значениями баллов, просто «построить» ее и повторить свой запрос следующим образом (обновлено после @Serg comment)

select
    S.score, 
    count(ST.Score) as [countTimes]
from 
(   Select 1 as Score 
    union all
    Select 2 as Score 
    union all
    Select 3 as Score 
    union all
    Select 4 as Score ) as S 
left join 
    ScoresTable ST on S.Score = ST.Score
GROUP BY 
    S.score
ORDER BY 
    S.score
0 голосов
/ 31 мая 2019

Осталось присоединиться к списку очков и ScoresTable

select
 sl.score, 
 count(st.score) as [countTimes]
from (
   values (1),(2),(3),(4)
 ) sl (score)
left join ScoresTable st on st.score = sl.score
group by sl.score
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...