Предположим, у меня есть таблица t1 с двумя столбцами: Student_ID и Grade. Данные показаны следующим образом;
Student_ID, Grade (1,'A'),(1,'C'),(1,'F'),(1,'A'),(2,'B'),(2,'A'),(2,'C'),(2,'A').
Теперь мне нужно сгруппировать Student_ID с новым столбцом с именем «Результат». У Student_ID 1 есть одна оценка «F», поэтому считайте, что он не пройден, а у Student_ID 2 нет оценки «F», поэтому считайте, что он сдан. Требуется результат должен быть таким.
Student_ID Result
1 Failed
2 Passed
Поскольку в таблице 500 записей, невозможно вручную ввести «пройдено» или «не пройдено».
SELECT `Student_ID`, (IF(`Grade`='F',"Failed","Passed")) AS `Result`
FROM t1 group by `Student_ID`;
Приведенный выше код не будет работать, так как столбец Grade
имеет 4 значения, а не 1.
Таким образом, код будет примерно таким.
SELECT `Student_ID`, (IF(`Grade` CONTAINS 'F',"Failed","Passed")) AS `Result` FROM t1 group by `Student_ID`;
Нет такой вещи СОДЕРЖИТ в sql но может быть ИМЕЮЩАЯ или В но как их использовать здесь?
Вы пытались использовать concat LIKE 'F%'
MySQL IF использует разделители ,
, а не ;
"Passed
нужно закрытие "
РиггсФолли! спасибо, что указали на ошибки. Я исправил, как вы советовали. На самом деле я обычно работаю над запросами и отчетами Libreoffice Base.
Вы можете использовать оператор CASE с EXISTS:
select DISTINCT
t.Student_ID,
case
when exists (
select 1 from t1 where Student_ID = t.Student_ID and Grade = 'F'
) then 'Failed'
else 'Passed'
end Result
from t1 t
Смотрите демо.
Результаты:
| Student_ID | Result |
| ---------- | ------ |
| 1 | Failed |
| 2 | Passed |
Вы также можете сделать это, оценив каждый Grade
до 1
или 0
для 'F'
или not 'F'
, а затем сгруппировав по Student_ID
:
select
t.Student_ID,
case sum(t.Result)
when 0 then 'Passed'
else 'Failed'
end Result
from (select Student_ID, Grade = 'F' Result from t1) t
group by t.Student_ID
Смотрите демо.
Спасибо за ваш ответ. Оба решения будут работать отлично.
Я новый участник этого форума, и я действительно впечатлен быстрыми ответами от участников и особенно «демо» с каждым решением. Всем спасибо и солидарен. Я буду горд быть членом этого сообщества.
concat, а затем вроде должно работать, например.