sql - 基于 has_many 模型列的结果计数的 Rails 查询

标签 sql ruby-on-rails ruby postgresql activerecord

Customer has_many Shifts through Jobs
Shifts belong_to Truck
Trucks belong_to Fleet

我正在尝试衡量客户预订类次的前 5 个最常用车队以及类次数量。理想情况下,我会得到Fleet A:X 类次等等。

我尝试使用 customer.shifts.joins(:fleets).select('*, count(shifts.fleet_id) as fancy_count').order('fleet_count desc') 但我不'除了手动循环查看客户的所有类次以找到利用率最高的车队之外,我真的不知道该去哪里。

预先感谢您提供任何见解!

最佳答案

所以,这个答案主要关注 SQL,我不确定将其转换回事件记录方法的最佳方法。这是一个专注于 Shifts 表的查询,而不是真正关心 Customer 表,您甚至不需要加入 Customer 表。加入轮类、卡车和车队。使用 shifts.c​​ustomer_id 上的 where 子句过滤与您感兴趣的客户相匹配的结果。选择 count(*) 并使用 按fleet.id分组。按计数排序并将结果限制为 5,您将获得结果集。

select count(*) as shift_count, fleets.id from shifts
  inner join trucks on shifts.truck_id = trucks.id
  inner join fleets on trucks.fleet_id = fleets.id
  where shifts.customer_id = 1
  group by fleets.id
  order by shift_count DESC
  limit 5;

要将其转换回事件记录代码,我认为您可以做的主要事情是找到一种方法将 group by 子句包含到 Customers 类中已有的内容中。

关于sql - 基于 has_many 模型列的结果计数的 Rails 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45424093/

相关文章:

sql - MySQL "IN"查询中的维护顺序

ruby-on-rails - 制作一个 form_for 将数据添加到现有模型(rails)

ruby - 如何在 Ruby 中将八进制数转换为十进制数?

sql - 关系代数 - 自然连接 - 一些基础知识

sql - 没有 ORDER BY 问题的 SELECT TOP 1 忽略 WHERE 语句

ruby-on-rails - 是否可以在 Ruby 1.9 中透明地实现 ActiveRecord 查询的 Future 模式?

ruby-on-rails - 为什么我无法直接访问 Active Record 回调中的实例变量?

javascript - capybara 在动态环境中的模糊性

ruby - 如何为 Redis-As-Rails-Cache(使用 Redis 作为 rails 缓存)Rails 4.1 实现连接池?

java - 需要有关使用 SQL 和 java 程序的分离度的帮助