基于Ruby中postgresql的SELECT查询获取嵌套良好且分组良好的哈希

基于Ruby中postgresql的SELECT查询获取嵌套良好且分组良好的哈希,ruby,select,hash,Ruby,Select,Hash,我有一个来自Postgresql的SELECT查询,返回如下结果: brand | model| firmware | direction | mbps -------+------+----------+-----------+------ Cisco | 7602 | 7.2 | up | 283 Cisco | 7602 | 7.3 | up | 192 Cisco | 7602 | 7.2 | down | 2

我有一个来自Postgresql的SELECT查询,返回如下结果:

 brand | model| firmware | direction | mbps 
-------+------+----------+-----------+------
 Cisco | 7602 | 7.2      | up        | 283
 Cisco | 7602 | 7.3      | up        | 192
 Cisco | 7602 | 7.2      | down      | 200  
 Cisco | 7602 | 7.3      | down      | 107 
 Cisco | 7602 | 7.2      | bi        | 249  
 Cisco | 7602 | 7.3      | bi        | 151  
{"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.2", "direction"=>"up", "mbps"=>"283"}
{"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.3", "direction"=>"up", "mbps"=>"192"}
{"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.2", "direction"=>"down", "mbps"=>"200"}
{"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.3", "direction"=>"down", "mbps"=>"107"}
{"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.2", "direction"=>"bi", "mbps"=>"249"}
{"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.3", "direction"=>"bi", "mbps"=>"151"}
我希望得到一个嵌套良好的散列结果,将品牌、型号、固件分组,然后显示每个方向的mbps值。 我想展示嵌套散列的示例,但我现在有点不知所措,甚至不知道如何正确构造它

当前,我从运行该查询中得到的哈希如下所示:

 brand | model| firmware | direction | mbps 
-------+------+----------+-----------+------
 Cisco | 7602 | 7.2      | up        | 283
 Cisco | 7602 | 7.3      | up        | 192
 Cisco | 7602 | 7.2      | down      | 200  
 Cisco | 7602 | 7.3      | down      | 107 
 Cisco | 7602 | 7.2      | bi        | 249  
 Cisco | 7602 | 7.3      | bi        | 151  
{"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.2", "direction"=>"up", "mbps"=>"283"}
{"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.3", "direction"=>"up", "mbps"=>"192"}
{"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.2", "direction"=>"down", "mbps"=>"200"}
{"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.3", "direction"=>"down", "mbps"=>"107"}
{"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.2", "direction"=>"bi", "mbps"=>"249"}
{"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.3", "direction"=>"bi", "mbps"=>"151"}

我希望我的问题有意义。

你可以像这样建立分组

rows = [{"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.2", "direction"=>"up", "mbps"=>"283"},
        {"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.3", "direction"=>"up", "mbps"=>"192"},
        {"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.2", "direction"=>"down", "mbps"=>"200"},
        {"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.3", "direction"=>"down", "mbps"=>"107"},
        {"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.2", "direction"=>"bi", "mbps"=>"249"},
        {"brand"=>"Cisco", "model"=>"7602", "firmware"=>"7.3", "direction"=>"bi", "mbps"=>"151"}]
data = {}
rows.each do |row|
  data[row['brand']] ||= {}
  data[row['brand']][row['model']] ||= {}
  data[row['brand']][row['model']][row['firmware']] ||= {} 
  data[row['brand']][row['model']][row['firmware']][row['direction']] = row['mbps']
end

puts data
产出:

{"Cisco"=>{"7602"=>{"7.2"=>{"up"=>"283", "down"=>"200", "bi"=>"249"}, "7.3"=>{"up"=>"192", "down"=>"107", "bi"=>"151"}}}}

哇,天才们在stackoverflow中游荡,非常感谢,这正是我想要的!你需要展示你是如何向Postgres发出请求的。看起来您是从命令行执行的,而不是使用驱动程序,或者最好是类似ORM的驱动程序。使用Sequel可以很容易地以散列的形式获取数据,因为散列是用于表示行的自然对象。