当前位置: 首页 >数据库 > laravel 中MySQL临时表使用

laravel 中MySQL临时表使用

MySQL原生语句

顾客分析-消费次数分析

select  sum(if(tmp.pay_number =1,1,0)) as frequency_1,  sum(if(tmp.pay_number = 1,tmp.pay_number,0)) as frequency_1_number,  sum(if(tmp.pay_number >=2 and tmp.pay_number <=8,1,0)) as frequency_2,  sum(if(tmp.pay_number >=2 and tmp.pay_number <=8,tmp.pay_number,0)) as frequency_2_number,  sum(if(tmp.pay_number >=9 and tmp.pay_number <=15,1,0)) as frequency_3,  sum(if(tmp.pay_number >=9 and tmp.pay_number <=15,tmp.pay_number,0)) as frequency_3_number,  sum(if(tmp.pay_number >15,1,0)) as frequency_4,  sum(if(tmp.pay_number >15,tmp.pay_number,0)) as frequency_4_number,  count(*) as frequency_total,  sum(tmp.pay_number) as frequency_number_totalfrom (  selectt.membership_id,count(*) as pay_number,sum(t.receivable) sum_receipts  from transactions t  where t.end_time >= '2018-05-01'and t.end_time <= '2018-05-31 23:59:59'and t.membership_id > 0// and t.pay_way = 1and t.business_id = 9  group by t.membership_id) tmp;

laravel 中的代码

 //根据会员ID分组,得出一个月此商户会员数,各个会员支付的笔数,以及每个会员的总金额$tmp = $transaction->selectRaw('membership_id,count(*) as pay_number,sum(receivable) as sale_amount')->whereBetween('end_time',[$start_time,$end_time])->where('membership_id','>',0)->where('business_id','=',$businessId) //当前商户->where('status','=',1)//交易状态为:成功->groupBy('membership_id'); //根据用户会员分组//根据上面的数据再获得相应次数下的各个用户数,支付笔数,金额数$v = \DB::table(\DB::raw("({$tmp->toSql()}) as t"))->mergeBindings($tmp->getQuery())->selectRaw('sum(if(t.pay_number =1,1,0)) as frequency_1_custombers,sum(if(t.pay_number = 1,t.pay_number,0)) as frequency_1_pay_number,sum(if(t.pay_number = 1,t.sale_amount,0)) as frequency_1_sale_amount,sum(if(t.pay_number >=2 and t.pay_number <=8,1,0)) as frequency_2_8_custombers,sum(if(t.pay_number >=2 and t.pay_number <=8,t.pay_number,0)) as frequency_2_8_pay_number,sum(if(t.pay_number >=2 and t.pay_number <=8,t.sale_amount,0)) as frequency_2_8_sale_amount,sum(if(t.pay_number >=9 and t.pay_number <=15,1,0)) as frequency_9_15_custombers,sum(if(t.pay_number >=9 and t.pay_number <=15,t.pay_number,0)) as frequency_9_15_pay_number,sum(if(t.pay_number >=9 and t.pay_number <=15,t.sale_amount,0)) as frequency_9_15_sale_amount,sum(if(t.pay_number >15,1,0)) as frequency_15_custombers,sum(if(t.pay_number >15,t.pay_number,0)) as frequency_15_pay_number,sum(if(t.pay_number >15,t.sale_amount,0)) as frequency_15_sale_amount,count(*) as total_custombers,sum(t.pay_number) as total_pay_number,sum(t.sale_amount) as total_sale_amount')->first();
// 合并绑定参数$query->mergeBindings($subQuery);OR$query->mergeBindings($subQuery->getQuery());\DB::table(\DB::raw('('.$subQuery.') as tt'))注意合并参数时 $subQuery 必须是 \Illuminate\Database\Query\Builder 类型如果是 \Illuminate\Database\Eloquent\Builder 类型的,用 getQuery() 方法不用 DB::raw() 直接写子查询,是因为查询带比较多的 where 条件和 group by, 而且内层查询和外层查询的 where 基本是一样的。

作者:独孤剑—宇枫
来源链接:https://www.cnblogs.com/xzj8023tp/p/9773260.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/117626.html

标签:group by
分享给朋友:

“laravel 中MySQL临时表使用” 的相关文章

MYSQL的存储过程 2022年05月16日 21:54:19
利用Oracle分析函数row 2022年06月03日 23:42:05
mysql 查询数据库内存大小 2022年06月06日 11:11:26
会mysql不一定会sql 2022年06月07日 04:41:06
Mysql 查询结果赋值到变量 2022年06月07日 12:35:42
mysql 查询表中前10条数据 2022年06月08日 04:35:17
mysql数据查询——复杂查询 2022年06月09日 23:08:26