【发布时间】:2021-10-07 09:23:28
【问题描述】:
我有 2 个模型:station 和 sensor_value,它们与站 ID 相关。
class Station < ApplicationRecord
has_many :sensor_values, primary_key: :station_id, foreign_key: :station_id, dependent: :destroy
validates :station_id, presence: true, uniqueness: true
end
class SensorValue < ApplicationRecord
belongs_to :station, primary_key: :station_id, foreign_key: :station_id
validates :value, :type, :station_id, presence: true
end
一个station可以有多个sensor values,每个sensor values保存不同类型的值(温度、湿度、光照)。
我需要从每个站点获取所有最新指标的平均值。我当前获取所有站点平均温度的解决方案:
def last_sensors_values
temperature = []
Station.all.each do |st|
next if st.sensor_values.empty?
temperature_val = st.sensor_values.where(type: 'temperature').last.value
temperature.push(temperature_val) unless temperature_val.zero?
end
{
temperature: temperature.sum / temperature.size
}
end
但我认为它可以用 SQL 来完成,关于如何改进这段代码的任何想法?
感谢您的帮助)
更新: 导轨 5.2.5 数据库 PostgreSQL >= 10
【问题讨论】:
-
您使用的是什么 Rails 版本?以及什么关系型数据库
-
stackoverflow.com/questions/31879150/… ... 但是使用
maximum而不是计数,那么您应该能够将总和除以大小...?
标签: sql ruby-on-rails ruby