識破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需要讀取的記錄數量與分組的組數量一樣多,也就是說比實際存在的記錄數目要少很多。

結束語

今天的分享就到這裏,相信大家看完一定會收穫。

願那些被隱藏着的祕密都被挖掘出來,共勉!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章