Привет я следующий запрос:Rails 3 Улучшение Active Record Query Performance
Player.select("Players.*, (SELECT COUNT(*) FROM Results WHERE Results.player_id = Players.id and win = true and competition_id = 4) as wins").where("competition_id = 4").order("wins desc")
По сути это подсчет и упорядочения записей игрока на основе его внешнего ключа вхождений в таблице результатов, где победа устанавливается истина для конкретного соревнование. Чтобы дать вам лучшее представление некоторых примеров данных из таблицы результатов могут быть ...
Player_ID | Match_ID|Win|Elapsed_Time|etc..
1 | 1 |T | 1:00 |etc..
2 | 1 |F | 1:00 |etc..
1 | 2 |T | 3:00 |etc..
3 | 2 |F | 3:00 |etc..
Как вы можете видеть два Выбирается происходит в этом заявлении, которое я имею в виду может привести к падению производительности в будущем. У игроков на самом деле есть отношения «один-много» с результатами, как вы могли догадаться, но я не мог понять, как сделать эту работу с объединением, которое, я думаю, может быть более эффективным.
Возможно, я ошибаюсь и никаких проблем с вышеуказанным запросом не возникает - в любом случае, пожалуйста, предоставьте несколько советов.
Я использую базу данных PostgreSQL.
Привет, я получаю сообщение об ошибке: ** PGError: ОШИБКА: колонка «results.id» должен появиться в GROUP BY оговорки или использоваться в агрегатной функции ** для пункта заказа в конце – Noz
Помогает ли это? http://stackoverflow.com/questions/10066041/heroku-pgerror-error-column-must-appear-in-the-group-by-clause-or-be-used-i – Salil
Я не использую Героку, я на самом деле уже на PG 9.1. На самом деле, как выясняется, вышеприведенный запрос не выполнит точно, что мне нужно [см. Здесь] (http://stackoverflow.com/questions/11105002/rails-3-select-query-wont-work), поэтому необходимы изменения так или иначе. Я думаю, что присоединение может быть маршрутом, который я должен принять – Noz