我使用下面的
TIMESTAMPDIFF
查询在选择中使用 ActiveRecord
,但它没有给出正确的结果。
1.
Job.where(id: [1,2])
.group(:user_level)
.select("user_level, SUM((TIMESTAMPDIFF(MINUTE, start_datetime, end_datetime) - unpaid_break_time) / 60 * hourly_rate) AS income")
2.
Job.select("user_level, SUM((TIMESTAMPDIFF(MINUTE, start_datetime, end_datetime) - unpaid_break_time) / 60 * hourly_rate) as income")
.where(id: [1,2]).group(:user_level)
3.
Job.find_by_sql("
SELECT user_level, SUM((TIMESTAMPDIFF(MINUTE, start_datetime,end_datetime) - unpaid_break_time)/60 * hourly_rate) as income
FROM jobs
WHERE id IN (1,2)
GROUP BY user_level
")
所有三个都给出相同的结果,即
[#<Job id: nil, user_level: 0.33e1>]
预期:
[{user_level: 0.33e1, income: 34}]
如果我在
Workbench
中执行上面3条生成的SQL,我得到了正确的结果。所以,查询是正确的。
另外,如果我使用
pluck
而不是 select
,我会得到正确的结果,但在数组中,pluck
返回数组。
Job.where(id: [1,2]).group(:user_level)
.pluck("user_level, sum(((TIMESTAMPDIFF(MINUTE, start_datetime,end_datetime) - unpaid_break_time)/60 * hourly_rate)) as income")
那么,如何使用
Select
来获得预期的输出呢?
注意:上面的查询中,id: 1,2只是举例,实际的id是不同的。
您是否尝试在工作中打电话给
.income
(#<Job id: nil, user_level: 0.33e1>
)?
Rails 获取所有返回的列并将它们分配给记录,但仅显示模型在控制台显示的默认
.inspect
中实际具有的属性。
在工作中拨打
.attributes
也应该会给你带来哈希收入。