如何对查询的数据进行二次分组??

关于项目开发过程中,在数据表的设计阶段,对某一个表a的字段进行设计,包括id,name,创建时间和状态。首先根据我业务需求,我需要对数据进行按时间分组,这一步可以实现,附上代码:(我使用的是php原生的数据库查询语句)
$data=$request->getQueryParams();
$from=$data['from'];
$to=$data['to'];
$res=Plan::query()
->where('user_id',$userid)
->where('status','!=',-1)
->whereBetween('create_time',[$from,$to])
->selectRaw('DATE_FORMAT(create_time,"%Y-%m-%d")asdate')
->selectRaw('COUNT(*)ascount')
->groupBy('date')
->orderBy('date','desc')
->get();
数据返回格式:
[
{
"date":"2018-10-21",
"count":"2"
},
{
"date":"2018-10-20",
"count":"2"
}
]
紧接着,我想设计另一种查询方式,也是我的需求,因为我的字段中设计status状态字段,状态可能为0,1,-1.我对数据过滤掉-1的,主要是我想在日期分组的条件下,再进行对status的分组,也就是二次分组,预期的数据结果是:(over统计的是为status1的,no统计的是status为0的){
"date":"2018-10-21",
"over":3,
"no":1
}但是我没有想到好的解决办法,希望可以提供思路与代码
杨魅力
浏览 547回答 2
2回答

qq_遁去的一_1

既然状态只有三种(0,1,-1),而-1已经过滤,所以结果集中只有状态0和1所以SUM(status)其实就是status=1的条数,用COUNT(*)减去SUM(status)就是status=0的条数//查询追加字段->selectRaw('SUM(status)asover')//数据返回[{"date":"2018-10-21","count":"2","over":"1",},{"date":"2018-10-20","count":"2","over":"0",}]//遍历结果,count-over=no
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript