ruby-on-rails - group_by_day 和 sum 工作不正确
问题描述
我有一个代码:
total_rate = company.crews
.joins(:assignment)
.where(assignments: { date: week[:from]..week[:to] })
.group_by_day('assignments.date', format: '%Y-%m-%d')
.joins(:workers)
.sum('workers.rate')
在输出中,作为一个有 2 名工人的工作人员,我们的费率 = 4,5,应该是 9。这是正确的。
如果在最后一行很容易做到 .sum ('workers.rate'),那么所有内容都会正常分组并汇总。输出是
{13:00 => 9} 9 是 worker.first.rate = 4,worker.last = 5。
但是,在这里,当我尝试将条件乘以更多时间时,结果发现每个worker.reit 都乘以时间差,但是您需要9 * 13:00 的worker rate 数量,
.sum('workers.rate * (time_arriving - time_leaving)')
不是 4 * 13.00 + 5 * 13.00
这就是麻烦...
解决方案
假设 Postgres:
'time' - 'time' 将返回一个间隔,将其与整数相乘不会改变类型。
您需要先提取小时数,然后将其乘以费率。此查询向您展示如何获取小时数:
select extract(epoch from time_leaving - time_starting) / 3600 from assignments
请注意,这select extract(hour from time_leaving - time_starting) from assignments
只会提取完整的小时数,因此12:00 - 10:15
将返回“1”
推荐阅读
- python - 如何在使用 BeautifulSoup 解析页面时仅获取有效的 url 链接?
- websocket - 模式匹配 gremlin 查询的结果只有在有 91 个匹配查询时才返回 64 个顶点
- reactjs - React Semantic UI - 如何禁用基于父组件的子组件
- java - if 语句的“立即正常完成”是什么意思?
- qt - 如何重新定义在 QTreeWidget 中扩展的节点?
- c# - 字符串的开头有一个 X 而不是 2 个 X
- terraform - terraform资源s3上传文件未更新
- html - 在两行中创建具有不同大小列的自定义 CSS 网格
- typescript - 通过jsdoc在typescript类中定义新方法
- javascript - Mongo/Mongoose:为什么这个查询会失败?