GroupBy 不显示所有数据

GroupBy doesn't show all the data

我有一个卖家名单,每个人都支付服务费。我想按降序显示按年份分组的服务费。该组的年份应按降序排列。比如,我输入了 2023、2020、2021 年的数据。组数据应该首先显示 2023,然后是 2021,然后是 2020。首先我尝试使用

$infos = Commision::all()->groupBy('country');

如果我先使用订单,它会显示错误。我有一个先前的问题 here。我试过

$infos = DB::table('service_charges')->groupBy('year')->orderBy('year','DESC')->get();
dd($infos);

但是它显示的只是每组的一个数据。我保存了 3 个数据 here . 2 is from 2021, 1 is from 2020. But the query showing me only one data from each group here。

GROUP BY SQL 语句用于聚合给定列具有相同值的数据。这意味着您只能获得该列中每个不同值的数据的单个聚合结果(即在您的情况下每年一个值)。

集合groupBy用于对自己集合中的所有数据进行分组,如果它们具有相同的值。但是,不同之处在于集合中的 groupBy 在查询之后运行,因此此时您不能再 orderBy 。您可以通过以下两种方式解决问题:

  1. 在查询中排序,然后对结果集合进行分组
$infos = DB::table('service_charges')->orderBy('year','DESC')->get()->groupBy('year');
  1. 对生成的集合进行排序
$infos = Commision::all()->groupBy('country')->sortKeysDesc();