我有这样的数据表:
month IKU value
2 1b 1
2 1b 1
1 2a 1
1 1a 1
我想要的结果:
month IKU value
2 1b 2
1 1a,2a 1,1
可能吗?
答案 0 :(得分:0)
您需要使用GROUP BY
两次以及GROUP_CONCAT
功能,如下所示:
SELECT
tmp.month,
GROUP_CONCAT(tmp.IKU) AS IKU,
GROUP_CONCAT(tmp.summedValue) AS value
FROM
(
SELECT
month,
IKU,
SUM(value) AS summedValue
FROM t
GROUP BY month,IKU
) AS tmp
GROUP BY tmp.month
ORDER BY tmp.month DESC
GROUP_CONCAT()函数
MySQL GROUP_CONCAT()
函数返回一个字符串,其中包含来自组的连接非NULL值。
当没有非NULL值时返回NULL。
<强>测试强>
-- ----------------------------
-- Table structure for `t`
-- ----------------------------
DROP TABLE IF EXISTS `t`;
CREATE TABLE `t` (
`month` int(11) DEFAULT NULL,
`IKU` varchar(10) DEFAULT NULL,
`value` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of t
-- ----------------------------
INSERT INTO `t` VALUES ('2', '1b', '1');
INSERT INTO `t` VALUES ('2', '1b', '1');
INSERT INTO `t` VALUES ('1', '2a', '1');
INSERT INTO `t` VALUES ('1', '1a', '1');
答案 1 :(得分:0)
试试这个。没有机会测试它,因为MySQL小提琴不起作用,但想法是sum(value)
的每个组合首先month,iku
。然后使用group_concat
连接结果集。
select month
,group_concat(IKU separator ',')
,group_concat(value separator ',')
from
(select month,IKU,sum(value) as value
from Table1 group by month,IKU
) t
group by IKU