[英]mysql group_concat group by on multiple fields
我有一個table成員,具有member_id
, member_name
, club_name
, region
, zone
, email
作為字段。
我正在使用MySQL group_concat
函數
SELECT group_concat(distinct m.email
SEPARATOR ', ' ) from member m group by m.club_name
一切正常。 但是我希望能夠在其他字段上使用group_concat
而不創建其他查詢。
是否可以提供其他字段作為參數?
member_id member_name club_name region zone email
1 member1 A 1 1 email1@example.com
2 member2 A 1 1 email2@example.com
3 member3 B 1 1 email3@example.com
4 member4 C 1 2 email4@example.com
5 member5 D 2 1 email5@example.com
**group by club**
email1@example.com,email2@example.com
email3@example.com
email4@example.com
email5@example.com
**group by region**
email1@example.com, email2@example.com, email3@example.com, email4@example.com
email5@example.com
**group by zone**
email1@example.com, email2@example.com, email3@example.com
email5@example.com
假設每個地區都有3個區域,每個區域都有一個以上的俱樂部。 現在,我該如何獲取可以分組或與地區,區域或俱樂部相關的電子郵件?
很難從問題中完全了解您的想法,但是您可以嘗試
SELECT club_name,
GROUP_CONCAT(DISTINCT email SEPARATOR ', ' ) emails,
GROUP_CONCAT(DISTINCT member_name SEPARATOR ', ' ) members
...
FROM member
GROUP BY club_name
樣本輸出:
| CLUB_NAME | EMAILS | MEMBERS | ------------------------------------------------------------------------ | Club1 | m1@mail.com, m2@mail.com, m3@mail.com | Jhon, Mark, Beth | | Club2 | m4@mail.com, m5@mail.com | Helen, Thomas |
這是SQLFiddle演示
附帶說明: 在這樣的問題中提供示例數據和所需的輸出通常可以改善您的更改,以更快地獲得答案,並且最適合您的需求。
更新:如果需要,可以使用GROUP_CONCAT()
使用不同的分隔符來深度包裝信息
SELECT 'club' group_type, GROUP_CONCAT(details SEPARATOR '|') details
FROM
(
SELECT CONCAT(club_name, ';', GROUP_CONCAT(DISTINCT email)) details
FROM member
GROUP BY club_name
) a
UNION ALL
SELECT 'region' group_type, GROUP_CONCAT(details SEPARATOR '|') details
FROM
(
SELECT CONCAT(region, ';', GROUP_CONCAT(DISTINCT email)) details
FROM member
GROUP BY region
) a
UNION ALL
SELECT 'zone' group_type, GROUP_CONCAT(details SEPARATOR '|') details
FROM
(
SELECT CONCAT(zone, ';', GROUP_CONCAT(DISTINCT email)) details
FROM member
GROUP BY zone
) a
樣本輸出:
| GROUP_TYPE | DETAILS | ----------------------------------------------------------------------------------------------------------------------- | club | A;email1@example.com,email2@example.com|B;email3@example.com|C;email4@example.com|D;email5@example.com | | region | 1;email1@example.com,email2@example.com,email3@example.com,email4@example.com|2;email5@example.com | | zone | 1;email1@example.com,email2@example.com,email3@example.com,email5@example.com|2;email4@example.com |
這是SQLFiddle演示
如果您在客戶端使用php,則可以在遍歷結果集的同時使用explode()
輕松地將details
列展開為單獨的記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.