我的第一篇文章,希望我遵循發佈指南的權利。如果沒有,請指出。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