使用 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 进行分组,再统计 每一家商店 每天的访问量
我使用的是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 统计成每天的
按照CSDN的一个大哥的回答:
select study.shop_id,left(study.time_stamp,10),count(*)
from study
group bystudy.shop_id,left(study.time_stamp,10)
请教下left在这里使用的含义是什么?
现在获取到了每天,每个商家的客户流量 ,如下:
表一: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语句啊?
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里的时间列里的每天时间点变成列名 【列转行】把时间列里的每一天(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]