Считать только если поле заполнено и совпадает со значением другого поля - PullRequest
0 голосов
/ 25 мая 2019

У меня есть вопрос о SQL-запросе, который я хочу сделать.Предположим, у меня есть столбец со следующими значениями в таблице: школа с столбцом: оценки.

 SUI grades | Score
  2  9          2
  2  9          
  5  4          1
  5  4          1
  5  4
  6  1          1
  6  1          

и таблица Grade_scores

id      score_1   score_2
 1         4         1

Теперь я не хочу вывод, где он группируетSUI, который подсчитывает оценки только , если Оценка заполнена и school.grades равно то же , что и Grade_scores.score_1 ИЛИ Grade_scores.score_2 .Таким образом, мой вывод будет:

SUI Count 
 5    2
 6    1

Код пока ...

SELECT SUI, Count(Grades)
FROM mytable
WHERE Score <> ''
GROUP BY SUI

Ответы [ 3 ]

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

Вам нужно JOIN, чтобы ваши school и grade_scores таблицы на grades находились в двух значениях grade_scores:

SELECT s.SUI, COUNT(s.grades) AS `Count`
FROM grade_scores gs
JOIN school s ON s.Score IS NOT NULL AND s.grades IN (gs.score_1, gs.score_2)
GROUP BY s.SUI

Вывод:

SUI Count
5   2
6   1

Демонстрация на dbfiddle

Примечание В этом запросе предполагается, что пустые значения в столбце Score равны NULL.Если они являются пустой строкой, замените s.Score IS NOT NULL на s.Score != ''

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

Я предпочитаю делать это, используя exists, потому что подход join будет иметь двойное значение, если в score_1 / score_2:

select s.sui, count(*)
from scores s
where s.score is not null and
      s.score in (select 1
                  from grade_scores gs
                  where s.grades in (gs.score_1, gs.score_2)
                 )
group by s.sui;
есть повторяющиеся значения
0 голосов
/ 25 мая 2019

(непроверенные):

SELECT SUI, count(GRADES) As Count 
FROM school
INNER JOIN Gradescores ON s.grades = score_1 OR s.grades = score_2 
WHERE Score>'' AND NOT Score IS NULL
GROUP BY SUI
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...