Выбор SQL внутри выбора

#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 
  

SQL Скрипка

Комментарии:

1. Если он / она хочет получить рейтинги для всех пользователей, тогда вам следует сделать LEFT JOIN вкл b .

2. Кроме того, только столбцы в GROUP BY могут отображаться в неагрегированном виде в SELECT .

3. спасибо за ответ, я пробовал это, но парень, у которого рейтинг 4, становится 3. а парень, у которого нет рейтинга, становится рейтингом 1.

4. @TheImpaler да, я хочу рейтинг для всех пользователей. пользователь, у которого нет рейтинга, тоже должен отображаться с рейтингом 0.

5. @RisliAzis, вы решили проблему с рейтингом? или вы все еще пытаетесь?