0.背景

前几天复习了一下MySQL函数,知道一个group_concat函数很好用,但一直没实际用过。今天碰到一个问题,把我问懵逼了。

1.实例

假设有一张用户购买产品的增量表order_list,字段为id(主键自增不用管),product_id(产品ID,属性值为A、B、C、D),user_id(用户ID)。

如下图:

#附创建表和插入数据
CREATE TABLE `order_list` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`product_id` char(10) DEFAULT NULL,
`user_id` int(5) DEFAULT NULL,
PRIMARY KEY (`id`)
) INSERT INTO order_list(product_id,user_id) VALUES('A',1),('A',1),('B',1),('C',2),('A',2),('A',3),('B',2),('C',2),('D',1);

2.列出每个用户购买过的所有产品(去重)

#查询每个user_id购买过的所有产品(去重)
select o.`user_id`,group_concat(distinct o.`product_id` ORDER BY o.`product_id` Asc SEPARATOR ' ') from order_list o
group by o.`user_id`
#说明:1.group_concat里的distinct不是必须的,没有只是不去重;
#2.ORDER BY o.`product_id` ASC也不是必须的,默认是合并的部分就是按升序排列,想按降序可以用DESC;
#3.SEPARATOR ' '也不是必须的,默认是按逗号分隔。
#例如:
SELECT o.`user_id`,GROUP_CONCAT(o.`product_id`) FROM order_list o
GROUP BY o.`user_id`



2.各个产品组合分别有多少用户数

#查询同时拥有多个产品的各个产品组合分别有多少人
select t.product_group,count(t.user_id) from
(select o.`user_id`,group_concat(distinct o.`product_id` ORDER BY o.`product_id` Asc SEPARATOR ' ') 'product_group' from order_list o
group by o.`user_id`
)t
group by t.product_group

3.全部可能产品组合分别有多少人

即查询有A/B/C/D/AB/AC/AD/BC/BD/CD/ABC... .../ABCD的一共4+6+4+1=15种组合的分别有多少个?

例如:user_id为1的A、B、D都买过,那么在A/B/D/AB/BD/ABD这几个组合里都+1。

——没想出来

【SQL函数】我知道你想group_concat和count一起用,比如不同组合的人数?的更多相关文章

  1. 记录一次SQL函数和优化的问题

    一.前言 上次在年前快要放假的时候记录的一篇安装SSL证书的内容,因为当时公司开始居家办公了,我也打算回个家 毕竟自己在苏州这半年一个人也是很想家的,所以就打算年过完来重新写博客.不巧的是,当时我2月 ...

  2. SQL函数说明大全

    一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...

  3. 常用的Sql 函数

    常用的Sql 函数 1: replace 函数,替换字符. 语法 replace (original-string, search-string, replace-string ) 第一个参数你的字符 ...

  4. SQL函数说明大全 (转)

    一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...

  5. sql函数(转)

    一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...

  6. SQL函数介绍

    http://www.cnblogs.com/moss_tan_jun/archive/2010/08/23/1806861.html 一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用 ...

  7. [转] SQL函数说明大全

    from http://www.cnblogs.com/moss_tan_jun/archive/2010/08/23/1806861.html 一旦成功地从表中检索出数据,就需要进一步操纵这些数据, ...

  8. Java进阶SQL函数、网页定时刷新与自定义JSTL函数

    一.SQL函数 能够在SQL语句中调用的函数(方法) ,用来实现一些小功能 聚合函数 能够把多行数据聚合成一个值(统计) count()    计数,计算数据条数 max()      计算最大值 m ...

  9. 【东软实训】SQL函数

    SQL函数 SQL是用于访问和处理数据库的标准的计算机语言,我们所使用的的是Oracle SQL 一个数据库通常包含一个或多个表,每个表有一个名字表示,下图即为一个名为“emp”的表,接下来的操作都将 ...

随机推荐

  1. servet概述

    1定义 Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. 使用 Servl ...

  2. Windows Server 2016 禁止自动更新后重启

    管理员运行cmd 输入Sconfig, 选择5,选择m

  3. NSIS 制作简单安装包

    ;replace NSIS/Contrib/zip2exe/Modern.nsh;NSI format: Asni;http://nsis.sourceforge.net/ ;UAC级别Request ...

  4. 前端js 省市联动

    代码下载地址 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  5. 【spring】之事物配置,声明式事务管理和基于@Transactional注解的使用

    http://blog.csdn.net/bao19901210/article/details/41724355

  6. C++进阶--解谜operator new/delete

    //############################################################################ // 解谜operator new/del ...

  7. django报错总结

    问题一: dictionary update sequence element #1 has length 3; 2 is required 解决方法: 检查视图函数的render里传的字典

  8. 微信小程序客服消息使用

    客服消息使用 为丰富小程序的服务能力,提高服务质量,微信为小程序提供客服消息能力,以便小程序用户可以方便快捷地与小程序服务提供方进行沟通. xiaokefu.com.cn 功能介绍 用户可使用小程序客 ...

  9. reids(缓存,reids下载,安装 测试)

    什么是缓存:缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找.由于缓存的运行速度比内存快得多,故缓存的作用 ...

  10. BOF、EOF 属性

    BOF.EOF 属性 BOF 指示当前记录位置位于 Recordset 对象的第一个记录之前. EOF 指示当前记录位置位于 Recordset 对象的最后一个记录之后. 返回值 BOF 和 EOF  ...