복붙노트

[SQL] MySQL의 결과 쉼표로 구분 된 목록으로

SQL

MySQL의 결과 쉼표로 구분 된 목록으로

나는 같은 쿼리를 실행해야합니다 :

SELECT p.id, p.name, 
       (SELECT name 
          FROM sites s 
         WHERE s.id = p.site_id) AS site_list
  FROM publications p

그러나 나는 대신 데이터의 컬럼의 목록을 쉼표로 구분을 반환하는 서브 - 선택 싶습니다. 이 경우에도 가능하고, 만약 그렇다면, 어떻게?

해결법

  1. ==============================

    1.당신은, 예를 그을 수행 할 GROUP_CONCAT을 사용할 수 있습니다 같은

    당신은, 예를 그을 수행 할 GROUP_CONCAT을 사용할 수 있습니다 같은

    SELECT p.id, p.name, GROUP_CONCAT(s.name) AS site_list
    FROM sites s
    INNER JOIN publications p ON(s.id = p.site_id)
    GROUP BY p.id, p.name;
    
  2. ==============================

    2.대신 그룹 CONCAT를 사용하는 ()는 () 단지 CONCAT을 사용할 수 있습니다

    대신 그룹 CONCAT를 사용하는 ()는 () 단지 CONCAT을 사용할 수 있습니다

    Select concat(Col1, ',', Col2) as Foo_Bar from Table1;
    

    이 단지 MySQL의 작품을 편집; 오라클 CONCAT는 두 개의 인수를 사용할 수 있습니다. 오라클에서는이 || 선택 COL1과 같이 사용할 수 있습니다 ','|| COL2 || ','|| COL3 표에서 foobar와 같은; SQL 서버에서 당신은 + 파이프 대신 사용할 수 있습니다.

  3. ==============================

    3.내 경우에는 내가 휴대 전화 번호가 고유의 사람의 모든 계좌 번호을 연결해야합니다. 내가 다음 쿼리를 사용하고 그래서 그것을 달성하기 위해.

    내 경우에는 내가 휴대 전화 번호가 고유의 사람의 모든 계좌 번호을 연결해야합니다. 내가 다음 쿼리를 사용하고 그래서 그것을 달성하기 위해.

    SELECT GROUP_CONCAT(AccountsNo) as Accounts FROM `tblaccounts` GROUP BY MobileNumber
    

    쿼리 결과는 다음과 같습니다 :

    Accounts
    93348001,97530801,93348001,97530801
    89663501
    62630701
    6227895144840002
    60070021
    60070020
    60070019
    60070018
    60070017
    60070016
    60070015
    
  4. ==============================

    4.이제 나는이 상황에 걸쳐 와서 GROUP_CONCAT 주위에 좀 더 흥미로운 기능을 발견했다. 나는 이러한 세부 사항은 당신이 흥미로운 느낌을 바랍니다.

    이제 나는이 상황에 걸쳐 와서 GROUP_CONCAT 주위에 좀 더 흥미로운 기능을 발견했다. 나는 이러한 세부 사항은 당신이 흥미로운 느낌을 바랍니다.

    간단한 GROUP_CONCAT

    SELECT GROUP_CONCAT(TaskName) 
    FROM Tasks;
    

    결과:

    +------------------------------------------------------------------+
    | GROUP_CONCAT(TaskName)                                           |
    +------------------------------------------------------------------+
    | Do garden,Feed cats,Paint roof,Take dog for walk,Relax,Feed cats |
    +------------------------------------------------------------------+
    

    DISTINCT와 GROUP_CONCAT

    SELECT GROUP_CONCAT(TaskName) 
    FROM Tasks;
    

    결과:

    +------------------------------------------------------------------+
    | GROUP_CONCAT(TaskName)                                           |
    +------------------------------------------------------------------+
    | Do garden,Feed cats,Paint roof,Take dog for walk,Relax,Feed cats |
    +------------------------------------------------------------------+
    

    DISTINCT와 ORDER BY와 GROUP_CONCAT

    SELECT GROUP_CONCAT(DISTINCT TaskName ORDER BY TaskName DESC) 
    FROM Tasks;
    

    결과:

    +--------------------------------------------------------+
    | GROUP_CONCAT(DISTINCT TaskName ORDER BY TaskName DESC) |
    +--------------------------------------------------------+
    | Take dog for walk,Relax,Paint roof,Feed cats,Do garden |
    +--------------------------------------------------------+
    

    DISTINCT와 SEPARATOR와 GROUP_CONCAT

    SELECT GROUP_CONCAT(DISTINCT TaskName SEPARATOR ' + ') 
    FROM Tasks;
    

    결과:

    +----------------------------------------------------------------+
    | GROUP_CONCAT(DISTINCT TaskName SEPARATOR ' + ')                |
    +----------------------------------------------------------------+
    | Do garden + Feed cats + Paint roof + Relax + Take dog for walk |
    +----------------------------------------------------------------+
    

    GROUP_CONCAT와 결합 열

    SELECT GROUP_CONCAT(TaskId, ') ', TaskName SEPARATOR ' ') 
    FROM Tasks;
    

    결과:

    +------------------------------------------------------------------------------------+
    | GROUP_CONCAT(TaskId, ') ', TaskName SEPARATOR ' ')                                 |
    +------------------------------------------------------------------------------------+
    | 1) Do garden 2) Feed cats 3) Paint roof 4) Take dog for walk 5) Relax 6) Feed cats |
    +------------------------------------------------------------------------------------+
    

    GROUP_CONCAT 및 그룹화 결과 다음은 GROUP_CONCAT를 사용하기 전에 결과가 있다고 가정

    +------------------------+--------------------------+
    | ArtistName             | AlbumName                |
    +------------------------+--------------------------+
    | Iron Maiden            | Powerslave               |
    | AC/DC                  | Powerage                 |
    | Jim Reeves             | Singing Down the Lane    |
    | Devin Townsend         | Ziltoid the Omniscient   |
    | Devin Townsend         | Casualties of Cool       |
    | Devin Townsend         | Epicloud                 |
    | Iron Maiden            | Somewhere in Time        |
    | Iron Maiden            | Piece of Mind            |
    | Iron Maiden            | Killers                  |
    | Iron Maiden            | No Prayer for the Dying  |
    | The Script             | No Sound Without Silence |
    | Buddy Rich             | Big Swing Face           |
    | Michael Learns to Rock | Blue Night               |
    | Michael Learns to Rock | Eternity                 |
    | Michael Learns to Rock | Scandinavia              |
    | Tom Jones              | Long Lost Suitcase       |
    | Tom Jones              | Praise and Blame         |
    | Tom Jones              | Along Came Jones         |
    | Allan Holdsworth       | All Night Wrong          |
    | Allan Holdsworth       | The Sixteen Men of Tain  |
    +------------------------+--------------------------+
    
    USE Music;
    SELECT ar.ArtistName,
        GROUP_CONCAT(al.AlbumName)
    FROM Artists ar
    INNER JOIN Albums al
    ON ar.ArtistId = al.ArtistId
    GROUP BY ArtistName;
    

    결과:

    +------------------------+----------------------------------------------------------------------------+
    | ArtistName             | GROUP_CONCAT(al.AlbumName)                                                 |
    +------------------------+----------------------------------------------------------------------------+
    | AC/DC                  | Powerage                                                                   |
    | Allan Holdsworth       | All Night Wrong,The Sixteen Men of Tain                                    |
    | Buddy Rich             | Big Swing Face                                                             |
    | Devin Townsend         | Epicloud,Ziltoid the Omniscient,Casualties of Cool                         |
    | Iron Maiden            | Somewhere in Time,Piece of Mind,Powerslave,Killers,No Prayer for the Dying |
    | Jim Reeves             | Singing Down the Lane                                                      |
    | Michael Learns to Rock | Eternity,Scandinavia,Blue Night                                            |
    | The Script             | No Sound Without Silence                                                   |
    | Tom Jones              | Long Lost Suitcase,Praise and Blame,Along Came Jones                       |
    +------------------------+----------------------------------------------------------------------------+
    
  5. from https://stackoverflow.com/questions/662207/mysql-results-as-comma-separated-list by cc-by-sa and MIT license