日常sql

5 篇文章 0 订阅
-- 查询包含两条以上订单的客户id
select  c.customer_id,count(o.order_id) as tcount  from crm_customer c inner JOIN crm_customer_external ce on c.customer_id = ce.customer_id
inner join crm_order_info o on ce.external_userid=o.source_customer_id and ce.channel_type = o.channel_type 
GROUP BY customer_id  HAVING tcount > 1  LIMIT 100

说明:查询出现两次以上的记录 通过 group by … having …

-- 一对多,字符串拼接
select re.customer_rel_id, GROUP_CONCAT(l.name) as stuName from 
crm_customer_label_rel  re 
left join crm_label l on l.id = re.label_rel_id  group by re.customer_rel_id

使用mysql的GROUP_CONCAT可对字符进行拼接
在这里插入图片描述

select c.customer_id,c.nick_name , f.user_id,u.clerk_name , f.create_time ,s.stuName
FROM crm_customer c inner join crm_customer_flower_rel f on c.customer_id = f.customer_id
left join store_shopping_guide u on f.user_id = u.clerk_no
left join ( select re.customer_rel_id, GROUP_CONCAT(l.name) as stuName from 
crm_customer_label_rel  re  left join crm_label l on l.id = re.label_rel_id  group by re.customer_rel_id ) s
on s.customer_rel_id = c.customer_id where f.create_time >='2021-03-26 00:00:00'
and u.channel_code ='1101'
select cc.* ,
dd.channel_name from (select cc.customer_id, GROUP_CONCAT(DISTINCT ec.channel_name) as channel_name  from (
select DISTINCT c.customer_id from crm_customer c INNER JOIN
crm_customer_external ec on c.customer_id = ec.customer_id 
INNER JOIN crm_order_info o on (o.source_customer_id = ec.external_userid and o.channel_type = ec.channel_type)
where 
 (o.receiver_area='罗湖区' or o.receiver_address like '%罗湖区%' )
 or  (c.address_city='深圳市' and c.address_county='罗湖区') 
) dd
inner JOIN 
crm_customer cc  on dd.customer_id = cc.customer_id
INNER JOIN 
crm_customer_external ec on cc.customer_id = ec.customer_id  
GROUP BY cc.customer_id )
dd inner join 
crm_customer cc  on dd.customer_id = cc.customer_id
select cc.* ,dd.totalAmount,dd.orderNum,dd.totalAmount/dd.orderNum as kdj,
dd.channel_name from (

select cc.customer_id,cc.totalAmount,cc.orderNum,GROUP_CONCAT(DISTINCT ec.channel_name) as channel_name  from (

select c.customer_id,sum(o.pay_ment_amount) as totalAmount,count(o.order_id) orderNum from crm_customer c 
INNER JOIN
crm_customer_external ec on c.customer_id = ec.customer_id 
INNER JOIN crm_order_info o on (o.source_customer_id = ec.external_userid and o.channel_type = ec.channel_type)
where 
 (o.receiver_area='罗湖区' or o.receiver_address like '%罗湖区%' )
 or  (c.address_city='深圳市' and c.address_county='罗湖区') 
   GROUP BY c.customer_id
) cc

INNER JOIN 
crm_customer_external ec on cc.customer_id = ec.customer_id  
GROUP BY cc.customer_id ,cc.totalAmount,cc.orderNum
)
dd inner join 
crm_customer cc  on dd.customer_id = cc.customer_id

编辑官方商城退单状态

## 20210607143924251
#已关闭
update Shop_ReturnOrders set Status=3,LogisticStatus=3 where  ReturnOrderId = 131294
#已完成
update Shop_ReturnOrders set Status=2 where  ReturnOrderId = 131290

pos查会员及其销售相关数据

      select t.会员卡号,t.会员手机号,t.会员姓名,t.开卡门店编号,t.开卡门店名称,t.区域名称,t.上级渠道编号,t.上级渠道名称,sum(t.amount) "消费金额",max(t.sheetdate) "最近一次消费日期", count(1) "消费频次"
 from (
select m.cardno "会员卡号",m.phone "会员手机号",m.name "会员姓名",c.code "开卡门店编号",c.name "开卡门店名称",v.WholeName "区域名称",c1.code "上级渠道编号",c1.name "上级渠道名称",
ss.sheetid,sum(ssg.amount) amount,ss.sheetdate
from membercard m
left join channel c on m.channelid=c.channelid
left join channel c1 on c.Parentid=c1.channelid
left join varea v on c.areaid=v.id
left join channeltypelist ctl on c.channeltypeid=ctl.id
left join salesheet ss on m.guid=ss.memberid
left join salesheetgoods ssg on ss.guid=ssg.guid
where ctl.channeltypename in ('零售店铺') and m.status=1  --and c.code='1137' --and  m.cardno='18676383401'
group by  m.cardno,m.phone,m.name,c.code,c.name,v.WholeName,c1.code,c1.name ,ss.sheetid,ss.sheetdate ) t 
group by  t.会员卡号,t.会员手机号,t.会员姓名,t.开卡门店编号,t.开卡门店名称,t.区域名称,t.上级渠道编号,t.上级渠道名称  

需求
统计 员工指定时间内添加的客户总数,有效客户总数,有效的客户时间段内 序号 1-100 101-10001等阶段的客户数 其中有效客户为 员工第一个添加 并且消费总金额要大于300

select 
	c.company_code AS companyCode,
	c.company_name AS companyName,
	c.channel_code AS storeCode,
	c.channel_name AS storeName,
	c.user_id AS userId,
	c.clerk_name AS clerkName,
	c.total AS total,
	r.effectiveTotal,r.jd1,	r.jd2,r.jd3,r.jd4,r.jd5
from 
(
		select 
		g.company_code,
		g.company_name,
		g.channel_code,
		g.channel_name,
		r.user_id,
		g.clerk_name,
		count(1) as total
		from 
			store_shopping_guide g 
		INNER JOIN
			crm_customer_flower_rel r 
		on r.user_id = g.clerk_no    
		where 
		r.create_time >='2021-01-06 00:00:00'
		and r.status = '0'
		and g.company_code ='8010'
		and g.status= 0
		GROUP BY g.company_code,g.company_name,g.channel_code,g.channel_name,r.user_id,g.clerk_name 
) c

LEFT JOIN 

(
		select 
		user_id,
		count(1) as effectiveTotal,
		count(case when pm >= 1 and pm <= 100 then 1 end) as jd1,
		count(case when pm >= 101 and pm <= 1000 then 1 end) as jd2,
		count(case when pm >= 1001 and pm <= 3000 then 1 end) as jd3,
		count(case when pm >= 3001 and pm <= 5000 then 1 end) as jd4,
		count(case when pm >= 5001 and pm <= 1000000 then 1 end) as jd5
		from 
		 (
				select 
				(@i:=@i+1) as pm, r.user_id,r.external_userid,r.create_time from 
				(
						select r.user_id,r.external_userid,r.create_time 
						from (
								select 
								r.user_id,r.external_userid,r.create_time,
								(select sum(o.pay_ment_amount) from  crm_customer_external e1 INNER JOIN  crm_order_info o
								on o.channel_type = e1.channel_type and o.source_customer_id = e1.external_userid  
								where o.scrm_order_status = 3  and e1.customer_id = r.customer_id) as saleAmount,
								(select sum(t.return_amount) from  crm_customer_external e1 INNER JOIN  crm_return_order_info t
								on t.channel_type = e1.channel_type and t.source_customer_id = e1.external_userid  
								where t.return_status = 8  and e1.customer_id = r.customer_id) as returnAmount
							
								FROM
									store_shopping_guide g 
								INNER JOIN
									crm_customer_flower_rel r 
								ON r.user_id = g.clerk_no 
                INNER JOIN 
								crm_customer_external e on e.customer_id = r.customer_id
								INNER JOIN 
								(
									select  external_userid,min(create_time) AS create_time
									from crm_customer_flower_rel
									where create_time
									GROUP BY external_userid
								 ) r1
								ON (r.external_userid = r1.external_userid and r.create_time = r1.create_time)
								where 
								r.create_time >='2021-08-06 00:00:00'
								and e.join_time >='2021-08-06 00:00:00'
								and r.status = '0'      
								and g.company_code ='8010'
								and g.status= 0
						) r
            where IFNULL(saleAmount,0) - IFNULL(returnAmount,0) >= 300
          
            ORDER BY r.create_time 

        ) r,(SELECT @i:=0) AS i
						
		 ) r
		GROUP BY r.user_id
)  r
on c.user_id = r.user_id

该sql存在的问题 : 查询最高添加该客户的员工 进行了全表扫描

按分数段统计
400到500人数,300到400人数

select
count(case when score between 400 and 500 then 1 end) as 400500,
count(case when score between 300 and 400 then 1 end) as 300400
from student_info;

按分数段和专业统计
400到500人数,300到400人数

select
count(case when score between 400 and 500 then 1 end) as 400500,
count(case when score between 300 and 400 then 1 end) as 300400
from student_info GROUP BY profession;

mysql update时,更新的表不能在set和where中用于子查询

update 
crm_customer_flower_rel r,
( select    r.id  from 
	 crm_customer_flower_rel r 
  INNER JOIN 
	(
	select  external_userid,min(create_time) AS create_time
	from crm_customer_flower_rel
	where create_time
	GROUP BY external_userid
   ) r1
  on (r.external_userid = r1.external_userid and r.create_time = r1.create_time)
) s

set first_join= '1'
where s.id = r.id
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值