我的数据库中有这个 SQL 查询,导致 Heroku 上的 PostgreSQL 出现问题。它导致页面无法加载,并在 Heroku 日志中出现上述错误。我使用的是 PostgreSQL 9.1.6,所以之前的错误显然已得到修复:
def self.top_countries
joins(:recipes).
select('countries.*, count(*) AS recipes_count').
group('countries.id').
order('recipes_count DESC')
end
我该如何重构它才能正常工作?
def self.top_countries
joins(:recipes).
select('countries.id, count(*) AS recipes_count').
group('countries.id').
order('recipes_count DESC')
这会生成 SQL
select countries.id, count(*) AS recipes_count
from countries
join recipes on countries.id = recipes.country_id
group by countries.id
order by recipes_count
您会注意到 SELECT 中只有 2 列。
作为一个 Heroku 专家,我怀疑您可以通过明确列出您需要的国家/地区的所有列并按完整列列表进行分组来使其工作,即
def self.top_countries
joins(:recipes).
select('countries.id, countries.name, countries.other, count(*) AS recipes_count').
group('countries.id, countries.name, countries.other').
order('recipes_count DESC')
可能有一种更简洁的方法将原始答案(顶部)与
top_countries
上的 countries.id
的另一个连接连接起来,以获取 group by
之后的其余列。