有没有一种更优雅的方法可以使用ruby dbi和数据库连接来计算一组数字的中值
我有下面的代码,它计算从数据库中提取的一组数字的中值。问题涉及到是否有更简单的方法从DBI::行数组计算列的中位数 作为一个旁侧数组,中值计算中的sort抛出并错误为“undefined method”有没有一种更优雅的方法可以使用ruby dbi和数据库连接来计算一组数字的中值,ruby,database,jdbc,dbi,Ruby,Database,Jdbc,Dbi,我有下面的代码,它计算从数据库中提取的一组数字的中值。问题涉及到是否有更简单的方法从DBI::行数组计算列的中位数 作为一个旁侧数组,中值计算中的sort抛出并错误为“undefined method” require 'dbi' def median(array, already_sorted=false) return nil if array.empty? # array.sort m_pos = array.size / 2 re
require 'dbi'
def median(array, already_sorted=false)
return nil if array.empty?
# array.sort
m_pos = array.size / 2
return array.size % 2 == 1 ? array[m_pos] : mean(array[m_pos-1..m_pos])
end
def mean(array)
array.inject(array.inject(0) { |sum, x| sum += x } / array.size.to_f)
end
begin
dbh = DBI.connect('DBI:jdbc:Cache://10.150.98.11:1972/SQLHRT', 'tpathhrt', 'tpathhrt',
'driver'=>'com.intersys.jdbc.CacheDriver')
sth = dbh.prepare("SELECT
DATEDIFF('hh',Result_Set.Date_Time_Booked_In,current_timestamp) AS HrsIn
FROM
iLabTP.Outstanding_Work_Index,
iLabTP.Result_Set Result_Set,
iLabTP.Request
WHERE
Outstanding_Work_Index.Request_Row_ID = Result_Set.Request_Row_ID and
Outstanding_Work_Index.Request_Row_ID = Request.Request_Row_ID and
Result_Set.Set_Code = 'TVITDN' order by HrsIn ASC")
sth.execute()
arr =[1]
sth.fetch do |row|
arr << row[0]
end
printf "Number of Records %d:\n", arr.size
printf "Median %s:\n", median(arr)
sth.finish
rescue DBI::DatabaseError => e
puts "An error occurred"
puts "Error code: #{e.err}"
puts "Error message: #{e.errstr}"
ensure
# disconnect from server
dbh.disconnect if dbh
end
Intersystems Caché有一个中值函数: 该页上的示例之一:
SELECT MEDIAN(birthd.decade.MEMBERS, MEASURES.[%COUNT]) ON 0 FROM patients
Intersystems Caché有一个中值函数: 该页上的示例之一:
SELECT MEDIAN(birthd.decade.MEMBERS, MEASURES.[%COUNT]) ON 0 FROM patients
更新
数组中的错误是由于ActiveRecord集中的nil元素引起的,已由修复
<%if !statistic.HrsIn.nil? %>
['<%= statistic.Specimen_Number %>', <%= statistic.HrsIn %>],
<% end %>
仅在系统间缓存中使用中间值函数,请参阅,而不是常规SQL更新
数组中的错误是由于ActiveRecord集中的nil元素引起的,已由修复
<%if !statistic.HrsIn.nil? %>
['<%= statistic.Specimen_Number %>', <%= statistic.HrsIn %>],
<% end %>
中位数函数仅在系统间缓存中深度查看,而不是常规SQL非常好,我一定错过了那个!谢谢你,我一定错过了那个!谢谢