Laravel或MySQL中如何查询出现次数最多的行记录,计数持平取最小值
你提出的需求在MySQL和Laravel中都可以实现,以下是具体实现方案:
MySQL 实现
实现逻辑:先对worktime_l字段分组统计每个值的出现频次,先按频次倒序排序保证出现次数最多的结果排在最前,频次相同的情况下按worktime_l数值升序排序保证更小的值排在前面,最后取第一条结果即可。
请将下方SQL中的your_table替换为实际业务表名:
SELECT worktime_l FROM your_table GROUP BY worktime_l ORDER BY COUNT(*) DESC, worktime_l ASC LIMIT 1;
Laravel 实现
可以通过查询构造器或者Eloquent ORM实现,逻辑和原生MySQL完全一致,下方为查询构造器写法:
// 请替换your_table为实际表名 $result = \Illuminate\Support\Facades\DB::table('your_table') ->select('worktime_l') ->groupBy('worktime_l') ->orderByRaw('COUNT(*) DESC') ->orderBy('worktime_l', 'asc') ->value('worktime_l');
如果使用Eloquent模型,将DB::table('your_table')替换为对应模型类的查询起始方法即可,比如WorkRecord::query(),最终value()方法会直接返回符合要求的数值,无需额外解析结果集。
内容的提问来源于stack exchange,提问作者Patas
相关产品推荐
相关产品推荐

