MySQL社区
标题: 使用 GROUP BY 语句 将数据表按shop_id进行分组,并统计每天有多少条记录: [打印本页]
作者: value_mysql 时间: 2017-2-8 10:16
标题: 使用 GROUP BY 语句 将数据表按shop_id进行分组,并统计每天有多少条记录:
表结构:
- CREATE TABLE `user_view` (
- `user_id` varchar(255) default NULL,
- `shop_id` varchar(255) default NULL,
- `time_stamp` varchar(255) default NULL
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
复制代码 表内容:
- 13201967 1197 2016-10-21 18:00:00
- 19461365 1197 2016-06-28 23:00:00
- 15022321 1197 2016-07-16 19:00:00
- 5440872 1197 2016-07-15 07:00:00
- 12594529 1197 2016-08-07 16:00:00
- 5440872 1197 2016-08-12 08:00:00
- 19918044 1197 2016-09-03 16:00:00
- 9476039 1197 2016-09-04 17:00:00
- 4081995 1197 2016-09-25 10:00:00
- 12594529 1197 2016-08-07 16:00:00
- 3367000 1197 2016-10-07 19:00:00
- 7544345 1197 2016-09-03 22:00:00
- 16877799 1197 2016-09-04 21:00:00
- 4081995 1197 2016-09-25 10:00:00
- 13901224 1197 2016-09-07 17:00:00
- 12436010 1197 2016-08-31 13:00:00
- 11417229 1197 2016-08-06 07:00:00
- 。。。。
复制代码 这张表是 2000家 线上商店 在 2016-06-22 00:00:00至2016-10-31 23:00:00 用户的浏览记录我想 根据 shop_id 进行分组,再统计 每一家商店 每天的访问量
-
-
test.txt
2.39 MB, 下载次数: 192
部分数据集
作者: value_mysql 时间: 2017-2-8 10:42
我使用的是navicat for mysql 操作的
下图是 部分数据集截图
使用 GROUP BY 语句 将数据表按商店名字(shop_id)进行分组,并统计每个shop_id有多少条记录:
- SELECT
- study.shop_id, COUNT(*)
- FROM
- study
- GROUP BY study.shop_id;
复制代码
使用 WITH ROLLUPWITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。
我们将以上的数据表按shop_id进行分组,再统计每天访问的次数:
- SELECT study.shop_id,study.time_stamp, SUM(study.time_stamp) as view_count FROM study GROUP BY study.shop_id WITH ROLLUP;
复制代码可以看到操作是错误的。。。。
想办法把时间点 time_stamp 统计成每天的
作者: value_mysql 时间: 2017-2-8 11:21
按照CSDN的一个大哥的回答:
- select study.shop_id,left(study.time_stamp,10),count(*)
- from study
- group by study.shop_id,left(study.time_stamp,10)
复制代码
请教下left在这里使用的含义是什么?
作者: value_mysql 时间: 2017-2-8 15:24
现在获取到了每天,每个商家的客户流量 ,如下:
表一:user_pay_count:商家每天客户流量数据- CREATE TABLE `user_pay_count` (
- `shop_id` varchar(255) default NULL,
- `time_stamp` varchar(255) default NULL,
- `count` varchar(255) default NULL
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
复制代码
现在想把上表和另一张表二合并成一张新表
表二:shop_info:商家特征数据
- CREATE TABLE `shop_info` (
- `shop_id` varchar(255) default NULL,
- `city_name` varchar(255) default NULL,
- `location_id` varchar(255) default NULL,
- `per_pay` varchar(255) default NULL,
- `score` varchar(255) default NULL,
- `comment_cnt` varchar(255) default NULL,
- `shop_level` varchar(255) default NULL,
- `cate_1_name` varchar(255) default NULL,
- `cate_2_name` varchar(255) default NULL,
- `cate_3_name` varchar(255) default NULL
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
复制代码
现在怎么把表一的time_stamp这一列每天的日期,变成表二里的列,
把表一与表二的shop_id相对应,把每天的客户流量 count 记录在
新表里,我的构想是如下图:
请教下该怎么写SQL语句啊?
-
2.png
(84.34 KB, 下载次数: 31)
作者: value_mysql 时间: 2017-2-8 16:27
- SELECT
- shop_info.shop_id,
- user_pay_count.shop_id,
- shop_info.city_name,
- shop_info.location_id,
- shop_info.per_pay,
- shop_info.score,
- shop_info.comment_cnt,
- shop_info.shop_level,
- shop_info.cate_1_name,
- shop_info.cate_2_name,
- shop_info.cate_3_name,
- user_pay_count.time_stamp,
- user_pay_count.count
- FROM
- shop_info ,
- user_pay_count
- WHERE shop_info.shop_id=user_pay_count.shop_id
复制代码
现在这个结果不是我想要的,我想要把时间这列 转换成列名
每行数据为1个商家,从2015-06-26 至2016-10-31每天的客户流量
一共2000个商家,2000行这样的表结构
转变下了思路,保持表shop_info结构不变,然后把表shop_info表里的10列数据直接插入到
表user_pay_count里,变成下图:
所以现在想把表user_pay_count里的时间列里的每天时间点 变成 列名
作者: value_mysql 时间: 2017-2-8 16:46
【列转行】把时间列里的每一天(2015-10-10 ),转成新的列名现在表的数据如下图:
想把上图的每一个时间 2015-10-10 、2015-10-11、2015-10-12、。。。。 变成列名
按照shop_id分组,每行一个shop_id
- SELECT
- user_pay_count.shop_id,
- MAX(CASE user_pay_count.time_stamp WHEN '2016-10-30' THEN user_pay_count.count ELSE 0 END) 2016-10-30
- MAX(CASE user_pay_count.time_stamp WHEN '2016-10-31' THEN user_pay_count.count ELSE 0 END) 2016-10-31
- FROM
- user_pay_count
- GROUP BY user_pay_count.shop_id
复制代码- [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2016-10-30
- MAX(CASE user_pay_count.time_stamp WHEN '2016-10-31' THEN user_pay_c' at line 3
复制代码 请问该怎么写,自动执行,生成从2015-06-26 至2016-10-31 这 493天,493列数据:
欢迎光临 MySQL社区 (http://www.mysqlpub.com/) |
Powered by Discuz! X3.2 |