MySQL的多个GROUP_CONCAT每月

MySQL的多个GROUP_CONCAT每月

问题描述:

计数我有一个MySQL表(place_analytics),我想获取使用GROUP_CONCAT place_id每月组数,MySQL的多个GROUP_CONCAT每月

enter image description here

我已经试过了,

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 

这给了我差不多吧的结果,

enter image description here

如果你看看排第三,这是

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'); 

欣赏您的反馈。

+0

这里的大多数人想要格式化文本,而不是图像。 – jarlh

+0

@jarlh,我很抱歉,我用模式编辑了我的问题。 –

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