Сортировка по количеству лайков

216
20 апреля 2018, 16:25

Здравствуйте, вопрос по sql. Есть 2 таблицы в базе данных. likes и servers. Сделал запрос, который должен сортировать записи из servers по количеству поставленных им лайков из таблицы likes (каждая оценка как отдельная запись в таблице, а не как число). Всё шикарно работает, кроме момента, когда у записи из servers нет ни одной оценки в соответствующей таблице с оценками, эта запись просто не выводится. Я не утверждаю, что следующий код должен и такую запись учитывать, просто я не знаю, как это реализовать, т.к. не силён в sql.

Вот запрос (за форматирование самого запроса не волнуйтесь, я использую ORM и он требует подобного синтаксиса):

select s.id, l.target, count(*) as marks from servers s inner join likes l on l.target = s.id group by s.id order by marks

Буду благодарен любой помощи.

Answer 1

Рекомендую попробовать вот так:

select s.id, count(l.id) as marks from servers s left join likes l on l.target = s.id group by s.id order by marks

Обратите внимание на несколько моментов:

  1. left join - он возьмёт все записи из servers.
  2. у вас group by s.id но в списке полей есть ещё l.target не под агрегатной функцией - так нельзя, l.target не нужен.
  3. count(*) в вашем случае (с inner join) нормально посчитает, но с left join посчитает и те записи из servers для которых не нашлось лайков, поэтому с left join нужно count(l.id) или count(l.target) если в likes нет поля id.
READ ALSO
Как перевести переменную в константу?

Как перевести переменную в константу?

Как перевести переменную в константу?

208
Segfault на ровном месте

Segfault на ровном месте

Доброго времени сутокПишу достаточно простую программку под Linux

240
Автоматическое изменение размера viewporta'a

Автоматическое изменение размера viewporta'a

У меня есть QGraphicsView виджет сделанный через дизайнерВ MainWidnow прописано:

198
C++ и Active Directory: ADDS vs ADSI

C++ и Active Directory: ADDS vs ADSI

Есть два инструмента взаимодействия с AD - это Active Directory Domain Services и Active Directory Service InterfacesЕсли я правильно понял, то первое - это просто сервис...

208