【发布时间】:2012-02-05 11:50:26
【问题描述】:
我的 rails 3 应用程序需要使用 SELECT DISTINCT,这(据我所知)无法通过 activerecord 查询来完成。所以我一直在执行直接 SQL,它在 sqllite 上本地运行良好——但在 Heroku (postgres) 上失败了。
在我的本地 (sqllite) 应用程序中,这工作正常:
r = ActiveRecord::Base.connection.execute("my query string")
但是在 heroku 上,使用 ActiveRecord::Base.connection.execute 总是返回一个空数据集
#<PGresult:0x0000000xxxxxxxxx>
即使是非常简单的查询,例如
r = ActiveRecord::Base.connection.execute("SELECT numeric_score FROM beeps WHERE store_id = '132' AND survey_num = '2'")
所以我使用heroku console 来调试一些非常基本的 SQL 查询,以尝试了解如何重新格式化我的 SQL 以在 Heroku/Postgres 上工作。
SELECT column_name WORKS:heroku 控制台,选择 postgres 记录是没有问题的,例如这个工作正常:
n = Beep.find_by_sql("SELECT numeric_score FROM beeps WHERE store_id = '132' AND survey_num = '2'")
给出预期的三个值:
[#<Beep numeric_score: 10>, #<Beep numeric_score: 9>, #<Beep numeric_score: 8>]
但是SELECT COUNT 失败了??当我尝试在 SQL 中对它们进行计数时
n = Beep.find_by_sql("SELECT COUNT(*) FROM beeps WHERE store_id = '132' AND survey_num = '2'")
它失败了,给出:
[#<Beep >]
SELECT SUM(column) 也失败了??当我尝试对它们求和时
n = Beep.find_by_sql("SELECT SUM(numeric_score) FROM beeps WHERE store_id = '132' AND survey_num = '2'")
它也失败了,给出:
[#<Beep >]
如何使用 Postgres 执行直接 SQL...SUM(columnname) 和 COUNT(*) 应该可以工作,对吧?
【问题讨论】:
-
原始 SQL 肯定可以工作。
SUM()和COUNT()很好。您可能需要为列命名,例如:COUNT(*) AS ct。此外,如果store_id是整数值,则只需写store_id = 132。survey_num也一样。没有单引号,那些是字符串值。查询仍然有效,因为在这种情况下字符串会自动转换为整数。
标签: sql postgresql heroku