value_mysql 发表于 2017-2-8 10:16:31

使用 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 进行分组,再统计 每一家商店 每天的访问量




value_mysql 发表于 2017-2-8 10:42:33

我使用的是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 FROMstudy GROUP BY study.shop_id WITH ROLLUP;
可以看到操作是错误的。。。。想办法把时间点 time_stamp 统计成每天的

value_mysql 发表于 2017-2-8 11:21:50

按照CSDN的一个大哥的回答:
select study.shop_id,left(study.time_stamp,10),count(*)
from study
group bystudy.shop_id,left(study.time_stamp,10)



请教下left在这里使用的含义是什么?

value_mysql 发表于 2017-2-8 15:24:44

现在获取到了每天,每个商家的客户流量 ,如下:
表一: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语句啊?




value_mysql 发表于 2017-2-8 16:27:24

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:45

【列转行】把时间列里的每一天(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 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列数据:


页: [1]
查看完整版本: 使用 GROUP BY 语句 将数据表按shop_id进行分组,并统计每天有多少条记录: