在 Laravel 中选择 Distinct 并按出现排序

Posted

技术标签:

【中文标题】在 Laravel 中选择 Distinct 并按出现排序【英文标题】:Select Distinct and order by occurrence in Laravel 【发布时间】:2021-11-18 06:45:04 【问题描述】:

美好的一天。我有一张如下图所示的表格。使用 Eloquent 模型(查询生成器也可以)我希望能够仅选择具有西装编号的唯一案例,同时按出现次数最多的案例排序。

例如,在下图中,由于“CA/E/14/2011”的出现次数为 3,我只想选择一个不同的值,因此我的查询应该返回两种情况。 “CA/E/14/2011”和“CA/A/344/2015”但“CA/E/14/2011”应该排在第一位,因为它的出现率更高。

【问题讨论】:

你尝试了吗?向我们展示您的要求 【参考方案1】:

以下查询应返回所需的结果集。

SELECT COUNT(suit_number) as occurrence, suit_number
FROM records
GROUP BY suit_number
ORDER BY occurrence DESC;

雄辩:

use App\Models\Record;

Record::selectRaw("COUNT(suit_number) as occurence, suit_number")
    ->groupBy("suit_number")
    ->orderBy("occurence", "desc")
    ->get();

SQL Fiddle

如果你只想要suit_number,你可以这样做

Record::selectRaw("COUNT(suit_number) as occurence, suit_number")
        ->groupBy("suit_number")
        ->orderBy("occurence", "desc")
        ->pluck('suit_number');

【讨论】:

感谢@linktoahref。工作,但我发现使用该查询,我无法获得表中的任何其他列。除了suit_number。这可能吗? 我认为这是不可能的,因为***.com/q/41887460/5808894 谢谢。我后来这样做了,它达到了目的CaseView::distinct()->selectRaw("COUNT(suit_number) as occurrence, suit_number, court, case_title") ->groupBy('suit_number', 'court', 'case_title') ->orderBy('occurrence', 'desc') ->get();

以上是关于在 Laravel 中选择 Distinct 并按出现排序的主要内容,如果未能解决你的问题,请参考以下文章

laravel 中 distinct() 的使用方法与去重

在 Laravel 的 withCount() 方法中使用 DISTINCT

在 Laravel Fluent 中使用 Distinct

如何简化 Laravel 查询以按年搜索日期并按月分组

Laravel ELOQUENT 问题中的 DISTINCT

Laravel Eloquent - distinct() 和 count() 不能一起正常工作