IF условие для группы записей с использованием mysql

Предположим, у меня есть таблица 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, а затем вроде должно работать, например.

ecp 28.05.2019 17:27

Вы пытались использовать concat LIKE 'F%'

McNline 28.05.2019 17:28

MySQL IF использует разделители ,, а не ;

RiggsFolly 28.05.2019 17:29
"Passed нужно закрытие "
RiggsFolly 28.05.2019 17:39

РиггсФолли! спасибо, что указали на ошибки. Я исправил, как вы советовали. На самом деле я обычно работаю над запросами и отчетами Libreoffice Base.

Novice_User1 29.05.2019 05:58
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
5
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать оператор 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

Смотрите демо.

Спасибо за ваш ответ. Оба решения будут работать отлично.

Novice_User1 29.05.2019 05:47

Я новый участник этого форума, и я действительно впечатлен быстрыми ответами от участников и особенно «демо» с каждым решением. Всем спасибо и солидарен. Я буду горд быть членом этого сообщества.

Novice_User1 29.05.2019 05:51

Другие вопросы по теме