在 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 的 withCount() 方法中使用 DISTINCT