Laravel中Distinct去重查询并按记录出现频次降序排序的实现
实现方案
假设你存储案件的数据表名为 cases,诉讼编号对应的字段名为 case_no,以下分别提供查询构造器和Eloquent两种实现方式:
1. 查询构造器实现
仅返回去重后的诉讼编号和对应出现频次,按频次倒序排列:
use Illuminate\Support\Facades\DB; $uniqueCases = DB::table('cases') ->select('case_no', DB::raw('COUNT(*) as occurrence_times')) ->groupBy('case_no') ->orderBy('occurrence_times', 'desc') ->get();
2. Eloquent模型实现
假设对应模型为 App\Models\Case:
use App\Models\Case; $uniqueCases = Case::select('case_no', DB::raw('COUNT(*) as occurrence_times')) ->groupBy('case_no') ->orderBy('occurrence_times', 'desc') ->get();
额外说明
如果你需要同时获取每个诉讼编号对应的其他案件字段,且数据库开启了ONLY_FULL_GROUP_BY校验,可以使用以下写法(示例取每个诉讼编号最新的一条完整记录):
$uniqueCases = Case::fromRaw('(SELECT * FROM cases ORDER BY created_at DESC) as latest_cases') ->groupBy('case_no') ->orderByRaw('COUNT(*) DESC') ->get();
返回结果中所有诉讼编号唯一,且完全按照出现频次从高到低排序,匹配你给出的示例需求。
内容的提问来源于stack exchange,提问作者Korlahwarleh
相关产品推荐
相关产品推荐

