数据库中的group by与rails中的group_by的区别及使用方法
来源:互联网 发布:不可抗力网络剧正片 编辑:程序博客网 时间:2024/05/16 04:35
group by是关系型数据库中较为常用的方法,rails也提供了类似的group_by方法,但两者还是有不小区别的,下面我们通过一个实例说明一下:
有一张表: orders,包含这些字段,用户ID: user_id商品ID: product_id购买数量: amount购买时间: buy_at
最后再次筛选出购买总数大于等于8的数据,那分组结果中的第一条数据又被去掉了,符合条件的只剩第二条了
如果用rails的find_by_sql来取数据:
@orders = Order.find_by_sql(["select user_id, sum(amount) from orders group by user_id"])此时如果看@orders.size的话,应该是2,只有两条数据
这个时候,我们再看一下rails提供的order_by方法:
@orders = Order.all.group_by{|o|o.user_id}此时我们得到的结果是这样的:{1=>[#<Order id: 1, user_id: 1, product_id: 1, amount: 3, buy_at: 2015-05-05>, #<Order id: 2, user_id: 1, product_id: 2, amount: 4, buy_at: 2015-05-05>], 2=>[#<Order id: 3, user_id: 2, product_id: 1, amount: 5, buy_at: 2015-05-05>, #<Order id: 4, user_id: 2, product_id: 2, amount: 6, buy_at: 2015-05-06>]}
结果很明显,返回了一组Hash,key是user_id,value是等于这个user_id的所有实例对象,个人认为rails中的group_by,更符合“分组”这个词的本义,并没有去合并或者计算数据,而且根据要求进行了单纯的分组处理。我们拿第一条数据来看一下:
@orders.first1=>[#<Order id: 1, user_id: 1, product_id: 1, amount: 3, buy_at: 2015-05-05>, #<Order id: 2, user_id: 1, product_id: 2, amount: 4, buy_at: 2015-05-05>]@orders.first[0]3@orders.first[1] #<Order id: 2, user_id: 1, product_id: 2, amount: 4, buy_at: 2015-05-05>]此时又能对@orders.first[1]进行.each来迭代输出数据了
总结一下:两种group by,不存在好与坏,因为应用的场景不同,善于利用group by,在某些场景下可以大大减少对数据库的查询次数,提高页面的执行效率。
FROM:http://www.jianshu.com/p/5eb4c9353b00
0 0
- 数据库中的group by与rails中的group_by的区别及使用方法
- Oracle 数据库中的GROUP BY与HAVING
- oracle中的having ,group by ,where之间联系与区别
- Solr中的group与facet的区别
- 关于数据库中的 group by 子句。
- group by与having的使用方法
- order by 与group by的区别!
- group by 与 partition by的区别
- GROUP BY的使用方法
- 查询group_by 与 order by
- MySQL中的 COUNT、SUM与 GROUP BY
- mysql中的Group by与having理解
- mysql中的Group by与having理解
- oracle group by中cube和rollup字句的使用方法及区别——入门级
- oracle group by中cube()和rollup()字句的使用方法及区别
- SYBASE15中的GROUP BY
- sql中的group by
- mysql中的group by
- 哈希表的应用(C++实现)
- 用matlab 将图片序列导出视频
- 一行代码,打造一个在线编辑器,方便好用
- http://www.cnblogs.com/wuyuegb2312/p/3248705.html
- 如何给c盘增加空间
- 数据库中的group by与rails中的group_by的区别及使用方法
- 离线安装supervisord
- 电子书《寿康宝鉴》(附白话)全文连载(五)
- SSL/TLS原理详解
- 从DragonBoard看物联网技术
- Openstack遇到的BUG和坑
- 第二章 Spring MVC入门 —— 跟开涛学SpringMVC
- DisplayTag用法小结
- 微信公众平台开发者模式(2)JAVA自动回复文本消息及多图文消息