SQL-запрос для сравнения количества определенных значений В поле

#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. Это сработало блестяще, большое вам спасибо.