我有一个名为SessionHistory
的表格,其列为ip
。
我现在想首先对具有相同ip
的记录进行分组,然后按照每个组中的记录数对组进行排序。
例如:
Record1: ip = 3
Record2: ip = 1
Record3: ip = 2
Record4: ip = 1
Record5: ip = 2
Record6: ip = 1
分组......
Group1:
Record1: ip = 3
Group2:
Record2: ip = 1
Record4: ip = 1
Record6: ip = 1
Group3:
Record3: ip = 2
Record5: ip = 2
排序......
Group1:
Record2: ip = 1
Record4: ip = 1
Record6: ip = 1
Group2:
Record3: ip = 2
Record5: ip = 2
Group3:
Record1: ip = 3
我的方法:
- @devices = SessionHistory.all.group_by(&:ip)
- @devices.keys.sort.each do |ip| # not sorted after size of group!
%h1= ip
%h4= @devices[ip].first.name # somehow not giving anything!
- @devices[ip].each do |session|
%h1.tiny= session.name
虽然存在一些问题,但这些组显然没有按其大小排序,而且我无法从一个组中的单个记录中读取值。
答案 0 :(得分:0)
分组SQL查询作为哈希返回,其中键是记录按组分组的IP值,值是对象本身。要对这种结果进行排序,您可以使用.sort
方法按哈希值计数:
@devices = SessionHistory.all.group_by(&:ip)
@devices.sort!{|a,b| b.values.count <=> a.values.count }
或反向排序就像调用.reverse
@devices = SessionHistory.all.group_by(&:ip)
@devices.sort!{|a,b| b.values.count <=> a.values.count }.reverse!
不是SQL解决方案,但至少它是干净的,只是工作™