识破laravel+groupBy+count中那些隐藏着的秘密


  • 谈一谈那些隐藏着的秘密吧!!!

laravel框架中写统计用户的领取数量,打算用 groupBycount来实现(去重+统计),加了groupBy之后再count,统计出来不的数量不对。查询资料+反复测试终于得到了解决方案。

错误的查询语句 ❌

Model::whereIn('course_id',$course_ids)->groupBy('uid')->count();

通过groupBy分组后,再执行Count()函数返回的是:分组后数据,第一个分组的数量。

正确的查询语句 ✔️

Model::whereIn('course_id',$course_ids)->groupBy('uid')->get()->count();
// 或
Model::whereIn('course_id',$course_ids)->count(DB::raw('DISTINCT(uid)')));
// 或
conut(Model::whereIn('course_id',$course_ids)->groupBy('uid')->pluck('uid')->toArray());

distinct关键字

MySQL查询的默认显示为所有行,包括重复的行。

SELECT子句中的MySQL DISTINCT关键字用于消除重复的行并显示唯一的值列表。

那DISTINCT 和GROUP BY哪个效率更高?

DISTINCT操作只需要找出所有不同的值就可以了。而GROUP BY操作还要为其他聚集函数进行准备工作。从这一点上将,GROUP BY操作做的工作应该比DISTINCT所做的工作要多一些。

但实际上,GROUP BY 效率会更高点,为什么呢?对于DISTINCT操作,它会读取了所有记录,而GROUP BY需要读取的记录数量与分组的组数量一样多,也就是说比实际存在的记录数目要少很多。

结束语

今天的分享就到这里,相信大家看完一定会收获。

愿那些被隐藏着的秘密都被挖掘出来,共勉!


文章作者: WXiangQian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 WXiangQian !
 上一篇
PHP接入海尔消费金融 PHP接入海尔消费金融
海尔消费金融简称“嗨付”,公司要求接入海尔金融分期,第一次听说这种支付,官方只有java的demo,没有php的,所以下面会提供一些php实战用到的代码 介绍 海尔会拉一个微信群,给一个word文档,上面会写着测试环境地址,很简洁,没有
2020-04-10
下一篇 
Ajax请求在safari浏览器不行,chrome可以正常请求 Ajax请求在safari浏览器不行,chrome可以正常请求
同样的Ajax请求,在chrome可以得到正常的response,但是在safari会返回”尝试载入资源时发生错误”。 原因: 可能是ajax的datatype没带。 如果你表单提交的button的type为“submit”,改为bu
2020-03-18
  目录