为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕无忌1623718 2019-03-07 21:57:19
关于项目开发过程中,在数据表的设计阶段,对某一个表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") as date') ->selectRaw('COUNT(*) as count') ->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 }但是我没有想到好的解决办法,希望可以提供思路与代码
查看完整描述

2 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

既然状态只有三种(0,1,-1),而-1已经过滤,所以结果集中只有状态0和1
所以SUM(status)其实就是status=1的条数,用COUNT(*)减去SUM(status)就是status=0的条数

// 查询追加字段
->selectRaw('SUM(status) as over') 

// 数据返回
[
    {
        "date": "2018-10-21",
        "count": "2",
        "over": "1",
    },
    {
        "date": "2018-10-20",
        "count": "2",
        "over": "0",
    }
]

// 遍历结果,count - over = no
查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 347 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信