Здравствуйте, вопрос по 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
Буду благодарен любой помощи.
Рекомендую попробовать вот так:
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
Обратите внимание на несколько моментов:
left join
- он возьмёт все записи из servers. group by s.id
но в списке полей есть ещё l.target
не под агрегатной функцией - так нельзя, l.target
не нужен. count(*)
в вашем случае (с inner join
) нормально посчитает, но с left join
посчитает и те записи из servers для которых не нашлось лайков, поэтому с left join
нужно count(l.id)
или count(l.target)
если в likes нет поля id.Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня есть QGraphicsView виджет сделанный через дизайнерВ MainWidnow прописано:
Есть два инструмента взаимодействия с AD - это Active Directory Domain Services и Active Directory Service InterfacesЕсли я правильно понял, то первое - это просто сервис...