MySQL多组\u concat,每月计数
我有一个MySQL表(place_analytics),我想使用group_concat按地点id获取每个月的计数 我试过这个MySQL多组\u concat,每月计数,mysql,sql,Mysql,Sql,我有一个MySQL表(place_analytics),我想使用group_concat按地点id获取每个月的计数 我试过这个 SELECT place_id, GROUP_CONCAT( DISTINCT MONTHNAME(STR_TO_DATE(MONTH(created_at), '%m')) ) AS months, COUNT(*) AS place_count FROM place_analytics GROUP BY place_id 这给了我几乎正确的结果 如果你
SELECT place_id,
GROUP_CONCAT(
DISTINCT MONTHNAME(STR_TO_DATE(MONTH(created_at), '%m'))
) AS months,
COUNT(*) AS place_count
FROM place_analytics
GROUP BY place_id
这给了我几乎正确的结果
如果你看第三行,也就是
place_id | months | place_count
4 | July, June | 2
计数是所有月份的总和,即7月、6月
问题:
是否有任何方法可以让我使用group_concat每月统计一次,如下所示
place_id | months | place_count
4 | July, June | 1,1
或者这种格式也可以
place_id | months_and_count
4 | July,1 SEPARATOR June,1
CREATE TABLE `place_analytics` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`place_id` int(11) NOT NULL,
`user_id` int(11) DEFAULT NULL,
`is_followed` tinyint(4) NOT NULL DEFAULT '0',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Records of place_analytics
-- ----------------------------
INSERT INTO `place_analytics` VALUES ('1', '10', '6', '0', '2017-06-01 15:45:04');
INSERT INTO `place_analytics` VALUES ('2', '98', '1', '1', '2017-06-01 15:45:39');
INSERT INTO `place_analytics` VALUES ('3', '98', '3', '1', '2017-06-01 15:46:24');
INSERT INTO `place_analytics` VALUES ('4', '10', '5', '1', '2017-06-01 17:51:27');
INSERT INTO `place_analytics` VALUES ('5', '98', '5', '1', '2017-06-01 17:53:48');
INSERT INTO `place_analytics` VALUES ('6', '98', '5', '1', '2017-06-08 15:43:27');
INSERT INTO `place_analytics` VALUES ('7', '1', '5', '1', '2017-06-08 15:47:56');
INSERT INTO `place_analytics` VALUES ('8', '2', '5', '1', '2017-06-08 16:00:43');
INSERT INTO `place_analytics` VALUES ('9', '4', '5', '1', '2017-06-09 16:21:19');
INSERT INTO `place_analytics` VALUES ('10', '4', '2', '1', '2017-07-13 14:29:45');
尝试上面的查询。尝试下面的查询:
SELECT p.place_id,
GROUP_CONCAT(
DISTINCT MONTHNAME(STR_TO_DATE(MONTH(p.created_at), '%m'))
) AS months,
(SELECT GROUP_CONCAT(cnt) FROM (
SELECT COUNT(*) AS cnt FROM place_analytics GROUP BY place_id, MONTH(created_at)
) a) AS place_count
FROM place_analytics p
GROUP BY place_id;
这是这里的大多数人想要的是格式化文本,而不是图像。@jarlh,很抱歉,我已经用模式编辑了我的问题。
SELECT p.place_id,
GROUP_CONCAT(
DISTINCT MONTHNAME(STR_TO_DATE(MONTH(p.created_at), '%m'))
) AS months,
(SELECT GROUP_CONCAT(cnt) FROM (
SELECT COUNT(*) AS cnt FROM place_analytics GROUP BY place_id, MONTH(created_at)
) a) AS place_count
FROM place_analytics p
GROUP BY place_id;