Как написать оператор CASE с условием для значений из подзапроса в SQLite

Таблица старшеклассников содержит данные в следующем формате:

Старшеклассник (удостоверение личности, имя, класс)

Английский: есть ученик старшей школы с уникальным ID и именем в определенном классе.

Пример данных в таблице:

ID       NAME      GRADE
1510    Jordan      9
1689    Gabriel     9
1381    Tiffany     9
1709    Cassandra   9
1101    Haley       10
1782    Andrew      10
1468    Kris        10

Таблица лайков содержит данные в следующем формате:

Любит ( ID1, ID2)

Английский: студенту с ID1 нравится студент с ID2. Любить кого-то не обязательно взаимно, поэтому, если (123, 456) находится в таблице Likes, нет никакой гарантии, что (456, 123) также присутствует.

Пример данных в таблице Likes выглядит следующим образом:

ID1      ID2
1689    1709
1709    1689
1782    1709
1911    1247
1247    1468
1641    1468
1316    1304
1501    1934
1934    1501
1025    1101

Теперь у меня есть вопрос:

Для каждого учащегося, которому нравится кто-то на 2 или более классов моложе себя, укажите имя и оценку этого учащегося, а также имя и оценку учащегося, который им нравится.

Чтобы добиться этого, я написал следующий запрос, в котором я могу получить данные об ученике, likes_student и их оценках. Что мне нужно сделать, так это вычесть оценки Liked_student и самого Student, если оценки>= 2, тогда я вывожу данные студентов. Это проверка оценок - это то, что я пытаюсь сделать в операторе CASE, который терпит неудачу.

Когда я выполняю внутренний запрос, подзапрос выполняется без каких-либо проблем, а это означает, что я могу получить все данные об ученике. Результаты подзапроса следующие:

 DIFFERENCE STUDENT_GRADE STUDENT_NAME STUDENT_LIKED_GRADE STUDENT_LIKED_NAME

    0         9           Cassandra          9         Gabriel
    0         9           Gabriel            9         Cassandra
    1         10          Andrew             9         Cassandra
    2         12          John               10        Haley

Только в операторе CASE выдается ошибка как

Код ошибки: 1109. Неизвестная таблица "INTER1" в списке полей

    SELECT CASE WHEN INTER1.GRADE_DIFFERENCE >= 2 THEN 
        (SELECT INTER1.* FROM
        (SELECT (H1.grade-H2.grade) AS GRADE_DIFFERENCE, 
                 H1.grade AS STUDENT_GRADE, 
                 H1.name AS STUDENT_NAME, 
                 H2.grade AS STUDENT_LIKED_GRADE, 
                 H2.name AS STUDENT_LIKED_NAME
         FROM Highschooler H1
         INNER JOIN Likes L
         ON H1.ID = L.ID1
         INNER JOIN Highschooler H2 
         ON H2.ID = L.ID2) INTER1)
         END

Как я могу сделать это? Я попробовал ЕСЛИ... ТО, но не смог заставить его работать.

Пожалуйста, помогите.

1 ответ

Это дало требуемый ответ:

SELECT INTER1.STUDENT_GRADE, 
       INTER1.STUDENT_NAME, 
       INTER1.STUDENT_LIKED_GRADE,
       INTER1.STUDENT_LIKED_NAME 
       FROM 
       (SELECT (H1.grade-H2.grade) AS GRADE_DIFFERENCE, 
                H1.grade AS STUDENT_GRADE, 
                H1.name AS STUDENT_NAME, 
                H2.grade AS STUDENT_LIKED_GRADE, 
                H2.name AS STUDENT_LIKED_NAME
        FROM Highschooler H1
        INNER JOIN Likes L
        ON H1.ID = L.ID1
        INNER JOIN Highschooler H2 
        ON H2.ID = L.ID2) INTER1
        WHERE INTER1.GRADE_DIFFERENCE >=2;
Другие вопросы по тегам