SQL запрос по условным выражениям - PullRequest
1 голос
/ 03 мая 2020

Я начинаю курс SQL cra sh, и у меня возникла эта проблема, это меня беспокоит, я не могу найти решение, и с блокировкой у меня нет никого, кого я могу спросить. Это об условных выражениях. В этой проблеме некоторые люди играют на разных инструментах и ​​иногда играют в дуэтах в школе. Мне нужно найти запрос, который возвращает таблицу с именем и гитарой (да или нет), если они играют на этом инструменте. Я должен работать со следующими таблицами: Стол студентов

|  id | name        |  grade  | gender
+-----+-------------+---------+------
|  1  | John        |    12   |  M
|  2  | Andrew      |    11   |  F
|  3  | Abigail     |    11   |  F
|  4  | Simon       |    10   |  M

Таблица дуэтов

| id | idStudent1 | idStudent2 | duetOf
+----+------------+------------+------
| 20 |    1       |    2       | Piano
| 35 |    2       |    4       | Piano
| 36 |    3       |    2       | Drums
| 37 |    4       |    1       | Drums
| 35 |    4       |    2       | Guitar
| 36 |    4       |    2       | Flute
| 37 |    4       |    3       | Piano

Запрос:

select s.name, Coalesce (d.duets, '(none)')
from students s, duet d
where s.id = d.idStudent1
  and s.id = d.idStudeant2
  and d.instrument = 'guitar'

Любые советы о том, как я могу справиться с этим такая проблема?

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Проверьте это

select s.name, case when duetOf = 'Guitar' then 'Yes' Else 'No' End as Guitar  
from duet d
inner join students s on d.idStudent1 = s.Id or d.idStudent2 = s.Id
0 голосов
/ 03 мая 2020

Вы можете выполнить условное агрегирование:

select
    s.id,
    s.name,
    max(case when d.duetOf = 'Piano'  then 'Yes' else 'No' end) piano,
    max(case when d.duetOf = 'Guitar' then 'Yes' else 'No' end) guitar
from students s
left join duets d 
    on s.id in (d.idStudent1, d.idStudent2)
group by s.id, s.name

Это создает одну запись для каждой записи в students с двумя столбцами, указывающими, принадлежит ли ученик дуэту, который играет на гитаре или фортепиано.

Если вам нужно отобразить больше столбцов из таблицы students, вы можете добавить их в оба предложения select и group by.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...