список запросов ученика, где оценка просто b

#mysql

#mysql

Вопрос:

у меня есть какая-то таблица

таблица: mhsw
nim; имя; проди
1001; вилли; SIF
1002; карел; SIF
1003; фикри; TIF
1004; ваван; DPI

таблица: krs
mkid; mkname; оценка; итоговая
1001; mk1; A; Y
1001; mk2; B; Y
1001; mk3; B; Y
1002; mk2; C; Y
1002; mk3; B; Y
1002; mk1; D; Y
1003; mk1; A; Y
1003; mk2; B; Y
1003; mk3; A; Y
1004; mk1; A; Y
1004; mk2; D; Y
1005; mk3; A; Y

я хочу, чтобы мой результат
был nim; name; prodi
1001; willy; SIF
1003; fikri; TIF

условием является печать списка mhsw, в котором все mkid в таблице krs — это все оценки A, B, C, а конечным значением является Y, и не отображать, когда оценка равна D или E

мне нужен запрос mysql, спасибо

Ответ №1:

Одним из дополнительных является использование условной агрегации в krs таблице, чтобы определить, у каких студентов были только A , B , или C оценки вместе со всеми Y для финала.

 SELECT t1.nim,
       t1.name,
       t1.prodi
FROM mhsw t1
INNER JOIN
(
    SELECT mkid
    FROM krs
    GROUP BY mkid
    HAVING SUM(CASE WHEN grade NOT IN ('A', 'B', 'C') THEN 1 END) = 0 AND   -- only A,B,C
           SUM(CASE WHEN final = 'Y' THEN 1 END) = COUNT(*)   -- all final is Y
) t2
    ON t1.nim = t2.mkid
  

Ответ №2:

 SELECT mhsw.*,tbl.*
FROM mhsw 
INNER JOIN 
     (SELECT mkid
     FROM krs
     Where grade IN ('A', 'B', 'C') 
     AND final = 'Y') tbl ON mhsw.nim = tbl.mkid
  

Если mhsw.nim = tbl.mkid имеет несколько строк, он будет отображаться как:

ним; имя; проди; mkid; mkname; оценка; окончательная;
1001; вилли; SIF; 1001;mk1; A; Y;
1001; вилли; SIF; 1001; mk2; B; Y;
1001; вилли; SIF; 1001; mk3; B; Y;
. .
.

1004; wawan; DPI; 1004; mk1; A; Y;

Комментарии:

1. я просто хочу упорядочить или сгруппировать по mhsw.name где оценка — это A, B, C, когда эта оценка не должна отображаться