欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

group_concat结合distinct筛选符合条件的记录

程序员文章站 2022-07-04 12:22:43
...

首先,创建一张外卖平台的“订单信息表”order_list,如下:
group_concat结合distinct筛选符合条件的记录

查询: 2018年1月只吃了“麻辣烫”和“汉堡”的用户数量

select count(*) 
from 
(select user_id, group_concat(distinct order_category) 下单菜品
from order_list
where date_format(order_time, "%Y-%m")='2018-1'
group by user_id
having  下单菜品 like '汉堡,麻辣烫'  or  '麻辣烫,汉堡' ) t ;   # 只吃了“麻辣烫”和“汉堡”,因此去重后用group_concat合并生成的只有这两种可能

注意:group_concat函数并不具备对字符串的去重功能,如果要对要进行合并的字符串进行去重,可以在group_concat的参数字段名前加上"distinct"关键字,如本例所示。

结果如下:
group_concat结合distinct筛选符合条件的记录

查询:每个用户吃的最多的食品品类,以及在该品类上的总消费金额

select user_id, order_category, 总消费金额
from 

(select t1.*, row_number() over (partition by user_id order by 下单次数 desc ) 下单次数排名
from 
(select user_id,order_category, count(*) 下单次数, sum(order_amt) 总消费金额
from order_list
group by user_id,order_category ) t1) t2  # 多字段分组

where 下单次数排名=1;   

结果如下:
group_concat结合distinct筛选符合条件的记录