#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, когда эта оценка не должна отображаться