MySQL的多个GROUP_CONCAT每月
问题描述:
计数我有一个MySQL表(place_analytics),我想获取使用GROUP_CONCAT place_id每月组数,MySQL的多个GROUP_CONCAT每月
我已经试过了,
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
计数的所有月份我的总和:电子七月,六月。
问: 有什么办法,我可以每个月使用GROUP_CONCAT获取计数,类似下面,
place_id | months | place_count
4 | July, June | 1,1
OR这种格式也将工作,
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 Z.place_id,GROUP_CONCAT(Z.place_count),GROUP_CONCAT(Z.months) months
FROM
(
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,MONTHNAME(STR_TO_DATE(MONTH(created_at), '%m'))
)Z
GROUP BY place_id
试试上面的查询。
希望这会帮助你。
+0
非常感谢你,这是工作。 –
答
尝试以下查询:
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;
这里的SQL Fiddle。
这里的大多数人想要格式化文本,而不是图像。 – jarlh
@jarlh,我很抱歉,我用模式编辑了我的问题。 –