#sql
Вопрос:
Мне бы хотелось, чтобы мне помогли научиться писать запросы такого типа — мой SQL еще не очень хорош, и я пытаюсь исправить ситуацию. Предполагая, что у меня есть таблица, аналогичная той, которую я показал ниже:
| id | hotel | opinion | |:---|:-----:| -------:| |1 |hotelA |good | |2 |hotelA |good | |3 |hotelA |bad | |4 |hotelB |good | |5 |hotelB |bad |
Желаемый Результат: hotelA
Как я мог написать запрос на печать только тех отелей, в которых в поле «мнение» было больше «хороших», чем «плохих»? Кроме того, любые ресурсы для улучшения работы с SQL очень приветствуются 🙂
Комментарии:
1. что вы пробовали до сих пор?
2. Также необходимо указать ожидаемый результат. (Ваши данные образца правильно отформатированы!)
3. Отредактировано, чтобы указать ожидаемый результат! Я думаю, что мне нужно выбрать отель, в котором мнение=»хорошо» в качестве одной переменной, выбрать отель, в котором опонион=»плохо» в качестве другой, использовать СЧЕТЧИК на них обоих, а затем выполнить сравнение. Я просто понятия не имею, как даже начать структурировать подобный запрос, я выполнял упражнения по хакерранку SQL, но еще не достиг ничего такого продвинутого.
Ответ №1:
Дайте этому попробовать
SELECT TOP 1 hotel FROM hotels ORDER BY SUM(CASE WHEN opinion = 'good' THEN 1 ELSE -1 END) DESC
Ответ №2:
Идея состоит в том, чтобы сгруппироваться по отелям и показывать только отели, в которых больше хорошего, чем плохого
select hotel from hotels group by hotel having sum(case when option = 'good' then 1 else -1 end) gt; 0
Комментарии:
1. Это сработало блестяще, большое вам спасибо.