我有一个模型Company,它有pbr、market_cap和category列。
为了获得按pbr分组的category的平均值,我可以使用group方法。
Company.group(:category).average(:pbr)
但是没有加权平均值的方法。
要获得加权平均值,我需要运行以下SQL代码。
select case when sum(market_cap) = 0 then 0 else sum(pbr * market_cap) / sum(market_cap) end as weighted_average_pbr, category AS category FROM
我有一个模型:Score player:string, sport:string score:integer。
我目前对这个SQL查询使用的是find_by_sql:
SELECT * FROM (SELECT * FROM scores ORDER BY score ASC) AS a1 GROUP BY a1.player HAVING a1.sport = 'Soccer';
为了便于移植,可以将上面的SQL查询转换为Rails ActiveRecord查询吗?
谢谢
我最近才从Rails 2.3.5升级到Rails 3.2.7,并且在我的一些查询中注意到一些性能下降。我知道Rails 3 ActiveRecord在某些情况下比Rails 2.3.5慢,但是我的基准测试让我感到惊讶,我只是想确保我没有遗漏任何东西。
作为基准测试,我运行了以下查询,这在我的应用程序中非常流行
SELECT SQL_NO_CACHE table_name.* FROM table_name WHERE ((string_col = 'value') AND (int_col1 BETWEEN 5 AND 30)) ORDER BY int_col2 DESC L
我刚刚开始学习Rails,目前让我困惑的是在has_many方法中使用lambda。我不明白的是羔羊体内的争论。我解释这一点的方式是,对于第一个参数,order是一个方法,其中的参数是published_at。但是,published_at是另一种以DESC为其参数的方法吗?这同样适用于原始方法参数的第二个参数。
class User < ActiveRecord::Base
has_one :profile
has_many :articles, -> { order('published_at DESC, title ASC') }
end
该查询工作良好,但作为练习,我将如何利用ActiveRecord方法来转换它?
Model.find_by_sql("SELECT *, SUM(impressions) AS impressions, SUM(cost) AS cost
FROM display_stats
WHERE (created_at >= '#{(Date.today-2).to_time.strftime('%Y-%m-%d')}'
AND
我有一个Rails/ActiveRecord服务器,通过原生gem利用Postgres。我想知道Postgres是否/如何重用查询计划。例如,假设我的应用程序有这样的内容:
ActiveRecord::Base.execute("select foo from t where id=5")
ActiveRecord::Base.execute("select foo from t where id=7")
Posgres会知道第二个SQL几乎与第一个完全相同,并重用现有的查询计划吗?
我不是在寻找“只使用模型!”的答案。或者什么不是;我只是想知道数据库中发生了什
我的Rails应用程序开始需要复杂的查询。我应该开始使用原始SQL查询吗?Rails社区的趋势是什么?
更新:
我现在没有书面质询,我想在开始前提出这个问题。但以下是我想要做的一个例子:
我有分类的书。我想说-
Give me all books that were:
-created_at (added to store) between date1 and date2
-updated_at before date3
-joined with books that exist in shopping carts right now
我还没有编写查询,但我认为rails版本会是这样的:
b
我正在尝试创建一个ActiveRecord查询,该查询生成以下SQL:
SELECT "tickets".* FROM "tickets" WHERE (status IN ('Complete','Cancelled'))
问题是我想用占位符来做,也就是说,我不能就这么做
Ticket.where(status: ['Complete','Cancelled'])
一定是这样的:
Ticket.where(['status IN (?)', "'Complete&
我只有两个模型:item和order,我知道像这样使用这些模型:
Item.count(:all)
Order.count(:all)
但我想要执行以下查询:(连接两个表,但只针对条件)
SELECT count(i.id)
FROM somethingitem as i, somethingorder as o
WHERE i.uid = o.uid_order
AND o.cancelled = 0
AND o.cashier = 1
AND o.seller = 0;
或与内部连接:
SELECT count(i.id)
FROM somethingitem as i
INNER JOI
我需要以这个页面特有的方式从我的数据库中提取聚合列,跨越几个模型,并且在一个已经存在性能问题的页面上聚集到内存中是很昂贵的。因此,我希望对数据库进行手工编写的SQL查询,并返回一组简单的对象(如散列或结构),然后我可以将这些对象分配给使用这些信息的现有对象。ActiveRecord::Base.connection.select_all很适合我想要的东西。
我的SQL字符串接受一个ids数组:
WHERE entry.task_id IN (#{@project.tasks.id})
但是这不起作用,因为它返回一个包装数组,而connection.quote由于某种原因返回一个项目符号列表。获
我有以下两种模式:
class Client < ActiveRecord::Base
has_many :orders
end
class Order < ActiveRecord::Base
belongs_to :client
end
我想用一个列表(order_1,order_2),中指定的订单查询客户端,同时,客户端的所有订单都需要。我可以通过下面的SQL来实现这一点:
SELECT *
FROM CLIENTS C
JOIN ORDERS O
ON C.ID = O.CLIENT_ID
WHERE EXISTS
(SELECT *
FROM CLIEN
我很难将这个SQL查询转换为ActiveRecord。这是我的SQL。
SELECT distinct stc_term_gpa,
user_id,
lesley_id,
first,
last,
FROM lesley_grades
ORDER BY user_id
这将返回437行,这就是我想要的。我在SQL中运行这个没有问题。
但是,当我试图在控制台的Rails中运行这个程序时:
LesleyGrade.select(:stc_term_gpa, :user_id, :lesley_id, :first, :last).distinct.order(:us
使用SQL,我可以很容易地进行这样的子查询
User.where(:id => Account.where(..).select(:user_id))
这会产生以下结果:
SELECT * FROM users WHERE id IN (SELECT user_id FROM accounts WHERE ..)
如何使用rails的3activerecord/ arel/ meta_where做到这一点?
我确实需要/想要真正的子查询,没有ruby的变通方法(使用几个查询)。
我有一个由受信任的管理员编写的普通SQL查询,它将在Rails (4.2)应用程序中运行。我正在使用ActiveRecord::Base.send(:sanitize_sql, ...)对其进行清理,以允许用户输入作为条件,使用?字符作为绑定变量。代码必须允许任意的SQL,所以我对为什么这不是Rails方式的争论不感兴趣,等等。
问题是,如果没有底层的?方法替换结果中的文本?,我就无法在SQL的结果字段中包含?。
例如,一个简单的查询是:
select 'http://www.google.com?q=' || res from some_table where a = ?;
我正在为(x86_64)使用mysql 14.14 distrige5.5.31。
此查询在You have an error in your SQL syntax[...]near 'read ASC'消息中失败:
SELECT 'messages'.* FROM 'messages' WHERE 'messages'.'user_id' = 2 ORDER BY read ASC;
其中,read列是由Rails ActiveRecord接口生成的用于存储布尔值的TINYINT(1)值。
同样的操作在切换到po
我正试图在我的Rails控制台中运行以下代码:
ActiveRecord::Base.connection.execute "DELETE FROM recommendations WHERE place_id=4000000001267 AND recommender_id=2728498;UPDATE IGNORE recommendations SET place_id=4000000001267 WHERE place_id=4000000564630 AND recommender_id=2728498;"
它只是为了合并而删除一条旧记录并重写另一条记录。
Rails
我有这样的东西:
module Api
module V1
class Order < ActiveRecord::Base
has_many :order_lines
accepts_nested_attributes_for :order_lines
end
end
module Api
module V1
class OrderLine < ActiveRecord::Base
belongs_to :order
end
end
在我的orders控制器中,我允许使用order_lines_attributes参数
我一直在考虑在我的web项目中从使用PHP切换到Ruby on Rails,而我最关心的一件事就是ActiveRecord for Rails的使用。在我看来,强烈建议使用ActiveRecord,而直接编写SQL似乎不太受欢迎。在看了几个项目之后,我还没有看到一个真正使用SQL的项目。
我还不喜欢ActiveRecord,主要是因为它需要学习一些看起来不像普通的SQL那么强大的东西,例如,有没有一种简单的方法来用group by和having子句来做嵌套查询,或者我必须跳过很多困难才能做到这一点?
有人在没有ActiveRecord的情况下使用过Rails吗?如果是这样的话,你有什么经验?