#mysql #sql #select
#mysql #sql #выберите
Вопрос:
У меня есть 3 таблицы.
person{personid,name, etc}
bid{bidid,personid,etc}
rating{ratingid,bidid,rating}
Пользователь получает рейтинг после того, как предложение принято клиентами. Итак 1 bid = 1 rating
.
И затем пользователь делает другой заказ, но рейтинг не отображается.
Я уже пробовал:
SELECT a.namausaha,ROUND(AVG(c.rating)) AS rating,a.kota,a.kontak,b.bidprice,a.mitraid
FROM tb_mitra a
JOIN tb_bid b ON b.mitraid=a.mitraid
LEFT JOIN tb_rating c ON c.bidid=b.bidid
WHERE b.orderid='OD004' AND b.statusbidid='1'
GROUP BY a.mitraid
но это не работает.
Как это сделать? Я хочу показать рейтинг для каждого пользователя.
Комментарии:
1. каков ваш ожидаемый результат?
2. Что не сработало? Вы получили сообщение об ошибке?
3. @fa06 я хочу показать рейтинг для каждого пользователя
4. @cegfault не ошибка. но рейтинг не отображается
5. Ваши
select
иgroup by
несовместимы.
Ответ №1:
Некоторые rating
возвращаются null
из-за left join
Попробуйте это
SELECT a.name,
ROUND(AVG(CASE WHEN c.rating IS NULL THEN 1 ELSE c.rating END )) AS rating,
a.etc,b.etc,a.personid
FROM person a
JOIN bid b ON b.personid=a.personid
LEFT JOIN rating c ON c.bidid=b.bidid
GROUP BY a.personid
Комментарии:
1. Если он / она хочет получить рейтинги для всех пользователей, тогда вам следует сделать
LEFT JOIN
вклb
.2. Кроме того, только столбцы в
GROUP BY
могут отображаться в неагрегированном виде вSELECT
.3. спасибо за ответ, я пробовал это, но парень, у которого рейтинг 4, становится 3. а парень, у которого нет рейтинга, становится рейтингом 1.
4. @TheImpaler да, я хочу рейтинг для всех пользователей. пользователь, у которого нет рейтинга, тоже должен отображаться с рейтингом 0.
5. @RisliAzis, вы решили проблему с рейтингом? или вы все еще пытаетесь?