@EVOSandru6

Почему не выполняется запрос postgres?

Добрый день!

Используется PostgreSql в качестве базы.

Есть 3 таблицы: Пользователи, предложения, рейтинги. Нужно, чтобы сначала шла сортировка по рейтингам по убыванию, далее по предложеным ценам из предложения по возрастанию. Чтобы сначала были более приоритетные предложения:

Пользователи:
--------------------
m_users
--------------------
id
name

--------------------

Предложения:
--------------------
mс_offers
--------------------
id
user_id
price

--------------------

Рейтинги:
--------------------
mс_offers
--------------------
id
user_id
name

--------------------

Пробую так:

SELECT * FROM m_users 
LEFT JOIN mc_rating ON m_users .id = mc_rating.user_id 
LEFT JOIN mc_offers ON  users.id = mc_offers.user_id
ORDER BY ( SUM(mc_rating.name) / COUNT(mc_rating.name) GROUP BY mc_rating.user_id ) DESC, mc_offers.price;


Получаю такую ошибку:

ERROR: syntax error at or near "GROUP"
LINE 28: ... BY ( SUM(mc_rating.name) / COUNT(mc_rating.name) GROUP BY ^
********** Ошибка **********
ERROR: syntax error at or near "GROUP"
SQL-состояние: 42601
Символ: 1213


Пробую сяк:

SELECT * FROM m_users 
LEFT JOIN mc_rating ON m_users .id = mc_rating.user_id 
LEFT JOIN mc_offers ON users.id = mc_offers.user_id
ORDER BY ( SUM(mc_rating.name) / COUNT(mc_rating.name)) DESC, mc_offers.price 
GROUP BY mc_rating.user_id;


Ловлю такую ошибку:

ERROR: syntax error at or near "GROUP"
LINE 29: GROUP BY mc_rating.user_id;
^
********** Ошибка **********
ERROR: syntax error at or near "GROUP"
SQL-состояние: 42601
Символ: 1236


В чем может быть проблема?
  • Вопрос задан
  • 3341 просмотр
Решения вопроса 1
@Swartalf
Попробуйте перечислить в GROUP BY все поля которые участвуют в запросе
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@EVOSandru6 Автор вопроса
Так вышло:

SELECT
m_users.*
FROM m_users
LEFT JOIN mc_rating ON m_users.id = mc_rating.user_id
LEFT JOIN mc_offers ON m_users.id = mc_offers.driver_id
GROUP BY mc_rating.user_id, m_users.id, mc_offers.price
ORDER BY ( SUM(mc_rating.name) / COUNT(mc_rating.name)) DESC, mc_offers.price;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы