Laravel 查询生成器;用总和获得不同的行

Posted

技术标签:

【中文标题】Laravel 查询生成器;用总和获得不同的行【英文标题】:Laravel query builder; get distinct rows with sums 【发布时间】:2021-08-30 05:40:14 【问题描述】:

假设我们有一个名为 BoxContents 的 SQL 表,其中每一行包含 id、boxID、itemID 和数量。

只有唯一的值是 id。我需要输入 boxID 并获取 itemID 的列表/数组及其 TOTAL 数量;

示例: 在 BoxContents 表中:

id boxID itemID quantity
1 foo banana 5
2 foo monkey 1
3 bar bomb 2
4 foo banana 5
5 bar fuse 2
6 bar banana 5
7 foo banana 5

查询box foo时的结果:

['banana'=>15, 'monkey'=>1]

查询框栏时的结果:

['bomb'=>2, 'fuse'=>2, 'banana'=>5]

我将如何进行查询?

DB::table('BoxContents')
    ->where('boxID', 'foo')
    ->select('itemID', SUM('quantity'))
    ->distinct();

是我目前得到的,但SUM()显然不被select()接受

这个可以吗?

【问题讨论】:

【参考方案1】:

您可以通过selectRaw()/DB::raw()

DB::table('BoxContents')
    ->where('boxID', 'foo')
    ->select('itemID', DB::raw("SUM('quantity')"))
    ->distinct();

【讨论】:

谢谢!不知道DB::raw可以这样用,以后会派上用场的!另外,感谢您对我的问题的样式:)

以上是关于Laravel 查询生成器;用总和获得不同的行的主要内容,如果未能解决你的问题,请参考以下文章

Laravel,获得类似 Eloquent 使用查询生成器的结果

Laravel 查询构建器和表名

Laravel 5查询生成器记录集数组

将联合与laravel结合使用时如何获得两个不同表的总和

Laravel 在连接结果上不同,在查询生成器中不起作用

Laravel 查询生成器按天计算行数 SQL db::raw