关于DB中的groupBy问题

关于DB中的groupBy问题

表名为 items 中的数据是:

['type'=> 0, 'item'=> 'A', 'amount'=> 1, 'price'=> 5],
['type'=> 0, 'item'=> 'B', 'amount'=> 1, 'price'=> 7],
['type'=> 1, 'item'=> 'A', 'amount'=> 2, 'price'=> 10],
['type'=> 0, 'item'=> 'A', 'amount'=> 1, 'price'=> 5],
['type'=> 1, 'item'=> 'B', 'amount'=> 5, 'price'=> 35],

问题: 求出item值相同,type值也相同时,amount的总和。

一个条件时的写法:

DB::table('items')
->select(DB::raw('item, sum(amount) as total'))
->groupBy('item')
->get();

请问复数条件时应该怎么写?

DB::table('items')
->select(DB::raw('item, sum(amount) as total'))
->groupBy('type','item')
->get();

你会得到type和item各种组合后,每种组合的amount总和。

JellyBool

这种在下不太擅长,我一般是把数据取出来之后再相加,(SQL 语句直接来,我太弱了)

javascript 回复 JellyBool

Jelly, 你好!
这道题用sql,我折腾出来了!又试了试collection,基本上也做出来了。
但问题出现在分页上。
如果是用sql的话, ->paginate() 这个方法是可以使用的。
但collection里貌似没有这个方法吧?!

JellyBool 回复 javascript

collection 是没有分页的,我没记错的话。

javascript 回复 JellyBool

知道了,谢谢

javascript

用collect的话,怎么写呢?

daniel.kong
DB::table('items')
->select(DB::raw('item, sum(amount) as total'))
->groupBy('type','item')
->get();

你会得到type和item各种组合后,每种组合的amount总和。

javascript 回复 daniel.kong

对,这个结就是我想要的。太感谢了!
哎, 原来就差一点点了。
就是没有想到groupBy可以设置复数条件。