group_concat结合distinct筛选符合条件的记录
程序员文章站
2022-07-04 12:22:43
...
首先,创建一张外卖平台的“订单信息表”order_list,如下:
查询: 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"关键字,如本例所示。
结果如下:
查询:每个用户吃的最多的食品品类,以及在该品类上的总消费金额
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;
结果如下: