복붙노트

[SQL] 어떻게 그룹 CONCAT MySQL의와 JSON 형식을 만들?

SQL

어떻게 그룹 CONCAT MySQL의와 JSON 형식을 만들?

어떻게 그룹 CONCAT MySQL의와 JSON 형식을 만들?

(내가 MySQL을 사용)

예 1 :

1 번 테이블:

email            |    name  |   phone
-------------------------------------
my1@gmail.com    | Ben      | 6555333
my2@gmail.com    | Tom      | 2322452
my2@gmail.com    | Dan      | 8768768
my1@gmail.com    | Joi      | 3434356

구문 코드처럼 나에게 형식을 제공하지 않는 것이 :

select email, group-concat(name,phone) as list from table1 
group by email

출력 내가 필요 :

email         |    list
------------------------------------------------
my1@gmail.com |  {name:"Ben",phone:"6555333"},{name:"Joi",phone:"3434356"}
my2@gmail.com |  {name:"Tom",phone:"2322452"},{name:"Dan",phone:"8768768"}

감사

해결법

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

    1.이 쿼리 -

    이 쿼리 -

    SELECT
      email,
      GROUP_CONCAT(CONCAT('{name:"', name, '", phone:"',phone,'"}')) list
    FROM
      table1
    GROUP BY
      email;
    

    JSON 형식의 결과 -

    +---------------+-------------------------------------------------------------+
    | email         | list                                                        |
    +---------------+-------------------------------------------------------------+
    | my1@gmail.com | {name:"Ben", phone:"6555333"},{name:"Joi", phone:"3434356"} |
    | my2@gmail.com | {name:"Tom", phone:"2322452"},{name:"Dan", phone:"8768768"} |
    +---------------+-------------------------------------------------------------+
    
  2. ==============================

    2.MySQL의의 최신 버전으로, 당신이 원하는 결과를 달성하기 위해 JSON_OBJECT 기능을 사용할 수 있습니다, 그래서 좋아한다 :

    MySQL의의 최신 버전으로, 당신이 원하는 결과를 달성하기 위해 JSON_OBJECT 기능을 사용할 수 있습니다, 그래서 좋아한다 :

    GROUP_CONCAT(
      JSON_OBJECT(
        'name', name,
        'phone', phone
      )
    ) AS list
    

    배열로 구문 분석 할 준비가 SQL 응답을 얻으려면 :

    CONCAT(
      '[',
      GROUP_CONCAT(
        JSON_OBJECT(
          'name', name,
          'phone', phone
        )
      ),
      ']'
    ) AS list
    

    이것은 당신에게 같은 문자열 줄 것이다 : [{이름 : 'ABC'전화 '111'}, {이름을 'DEF'전화 '222'}]이 될 수있는 JSON 구문 분석. 도움이 되었기를 바랍니다.

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

    3.Devart의 대답은 위에서 매우 중요하지만, K2xL의 질문은 유효합니다. 내가 찾은 답은 유효 JSON을 만들 것이라고하는 보장 () HEX를 사용하여 16 진수 인코딩에 이름 열였다. 그런 다음 응용 프로그램에서 문자열로 16 진수 다시 변환합니다.

    Devart의 대답은 위에서 매우 중요하지만, K2xL의 질문은 유효합니다. 내가 찾은 답은 유효 JSON을 만들 것이라고하는 보장 () HEX를 사용하여 16 진수 인코딩에 이름 열였다. 그런 다음 응용 프로그램에서 문자열로 16 진수 다시 변환합니다.

    (죄송 자기 홍보를위한 그러나) 나는 조금 더 디테일 이것에 대해 약간의 블로그 포스트를 작성했습니다 : http://www.alexkorn.com/blog/2015/05/hand-rolling-valid-json-in-mysql-using-group_concat/

    [편집 오리올 위해 여기 예입니다 :

    SELECT email,
        CONCAT(
            '[',
            COALESCE(
                GROUP_CONCAT(
                    CONCAT(
                        '{',
                        '\"name\": \"', HEX(name), '\", ',
                        '\"phone\": \"', HEX(phone), '\"',
                        '}')
                    ORDER BY name ASC
                    SEPARATOR ','),
                ''),
            ']') AS bData
    FROM table
    GROUP BY email
    

    또한 내가 그 이메일에 대한 항목이없는 경우에 COALESCE을 추가 한주의.

  4. ==============================

    4.나는이 오른쪽 눈을 발견 바랍니다.

    나는이 오른쪽 눈을 발견 바랍니다.

    당신이 사용할 수있는:

    배열 (문서)의 경우 :

    JSON_ARRAYAGG(col_or_expr) as ...
    

    객체 (문서)의 경우 :

    JSON_OBJECTAGG(key, value) as ...
    
  5. ==============================

    5.

        SELECT
            email,
            JSON_ARRAYAGG(
                JSON_OBJECT(
                    'name', name,
                    'phone', phone
                )
            ) AS list
        FROM table1
        GROUP BY email;
    
    +---------------+-------------------------------------------------------------------+
    | email         | list                                                              |
    +---------------+-------------------------------------------------------------------+
    | my1@gmail.com | [{"name":"Ben", "phone":6555333},{"name":"Joi", "phone":3434356}] |
    | my2@gmail.com | [{"name":"Tom", "phone":2322452},{"name":"Dan", "phone":8768768}] |
    +---------------+-------------------------------------------------------------------+
    

    유일한 차이점은 JSON으로 직접 구문 분석 할 수 있도록 열 목록은 이제 JSON-유효한 것입니다

  6. ==============================

    6.Devart의 대답 @으로 떨어져가는 ... 필드가 줄 바꿈 또는 큰 따옴표가 포함되어있는 경우, 결과는 유효 JSON되지 않습니다.

    Devart의 대답 @으로 떨어져가는 ... 필드가 줄 바꿈 또는 큰 따옴표가 포함되어있는 경우, 결과는 유효 JSON되지 않습니다.

    그래서, 우리가 알고있는 경우 "전화"필드에 가끔 따옴표와 줄 바꿈을 포함, 우리의 SQL과 같을 것이다 :

    SELECT
      email,
      CONCAT(
        '[',
        GROUP_CONCAT(CONCAT(
            '{name:"', 
            name, 
            '", phone:"', 
            REPLACE(REPLACE(phone, '"', '\\\\"'),'\n','\\\\n'), 
            '"}'
          )),
        ']'
      ) AS list
    FROM table1 GROUP BY email;

    벤 전화가 중간에 견적을 가지고 있으며, 조이의이 개행 문자가있는 경우, SQL과 같은 결과를 (유효 JSON)을 줄 것입니다 :

    [{name:"Ben", phone:"655\"5333"},{name:"Joi", phone:"343\n4356"}]
  7. ==============================

    7.이 같은 사용

    이 같은 사용

    SELECT email,concat('{name:"',ur_name_column,'",phone:"',ur_phone_column,'"}') as list FROM table1 GROUP BY email;
    

    건배

  8. from https://stackoverflow.com/questions/12511933/how-create-json-format-with-group-concat-mysql by cc-by-sa and MIT license