我的第一篇文章,希望我遵循发布指南的权利。如果没有,请指出。Mysql group_concat从另一行的不同值
我的表结构(credit_notes)与一些样品数据看起来像这样:
index | customer_id | user_id | doc_number | doc_date | amount | scheme_description
+-----+-------------+---------+------------+------------+--------+-------------------
1 | 8 | 2 | IABCD001 | 2012-09-08 | 1232 | XYZ Scheme
2 | 8 | 2 | IABCD001 | 2012-09-08 | 2032 | XYZ Scheme
3 | 8 | 2 | IABCD002 | 2012-09-09 | 2556 | XYZ Scheme
4 | 8 | 2 | IABCD003 | 2012-09-08 | 232 | XYZ Scheme
5 | 8 | 2 | IABCD001 | 2012-09-10 | 2556 | ABC Scheme
6 | 8 | 2 | IABCD003 | 2012-09-10 | 232 | ABC Scheme
我的要求是,提取每scheme_description & doc_date组合的总量,与分组。这是我当前的查询:
SELECT
SUM(`amount`) AS `totalamount`,
GROUP_CONCAT(CONCAT(`amount` , ";") ORDER BY `index` DESC SEPARATOR '') AS `amounts`,
GROUP_CONCAT(CONCAT(`doc_number` , ";") ORDER BY `doc_number` DESC SEPARATOR '') AS `docno` ,
`doc_date` AS `docdate` ,
`scheme_description` AS `schemedesc`
FROM (
SELECT
`c`.`index` ,
`c`.`doc_number` ,
`c`.`doc_date` ,
`c`.`amount` ,
`c`.`scheme_description`
FROM `credit_notes` AS `c`
WHERE `c`.`customer_id` = 8
AND `c`.`user_id` LIKE 2
)t
GROUP BY `scheme_description` , `doc_date`
该查询返回此结构:
totalamount | amounts | docno | docdate | schemedesc
+-----------+----------------+-----------------------------+------------+-----------
3496 | 1232;2032;232; | IABCD001;IABCD001;IABCD003; | 2012-09-08 | XYZ Scheme
2556 | 2556; | IABCD002; | 2012-09-09 | XYZ Scheme
23477 | 255;23222; | IABCD007;IABCD007; | 2012-09-10 | ABC Scheme
但是,我需要这一个细微的变化,我想总结的达列每个不同docno,并按正确的顺序对其进行分组。因此,按照上述数据,查询应该产生:
totalamount | amounts | docno | docdate | schemedesc
+-----------+----------------+-----------------------------+------------+-----------
3496 | 3264;232; | IABCD001;IABCD003; | 2012-09-08 | XYZ Scheme
2556 | 2556; | IABCD002; | 2012-09-09 | XYZ Scheme
23477 | 23477; | IABCD007; | 2012-09-10 | ABC Scheme
这可能使用GROUP_CONCAT和独特的和之和。阅读我能找到的所有内容,但找不到任何指向正确方向的内容。
这可能吗?
啊哈,关键是通过使用两个组声明。非常感谢你。 – deadbeef
是的,是的。因为你第一次需要按三个字段分组,其次是两个字段。 – Devart
如果它是正确的,请接受答案。 – Devart