source

값이 다른 행을 단일 행으로 병합

ittop 2023. 8. 26. 00:02
반응형

값이 다른 행을 단일 행으로 병합

사용 중인 쿼리

SELECT v.*,  if( up.upload_key = 'send', up.upload_value, 0 ) AS send,  
    if( up.upload_key = 'host', up.upload_value, 0 ) AS host, 
     if( up.upload_key = 'upload_id', up.upload_value, 0 ) AS upload_id 
FROM TableInit v JOIN TableName up ON up.video_id =  v.id_video;

쿼리의 반환은 다음과 같습니다.

| id_video | titulo | desc | send | host |    upload_id |
|----------|--------|------|------|------|--------------|
|        6 |  Title | Desc |    0 |  cnn |            0 |
|        6 |  Title | Desc |    0 |    0 |            0 |
|        6 |  Title | Desc |    0 |    0 | sHGN-tSNvJYs |

제가 필요한 반품은 다음과 같습니다.

| id_video | titulo | desc | send | host |   upload_id |
|----------|--------|------|------|------|-------------|
|        6 |  Title | Desc |    0 |  cnn |sHGN-tSNvJYs |

GROUP BY를 사용하면 첫 번째 행의 값만 반환되고 다른 행의 값은 반환되지 않습니다.

| id_video | titulo | desc | send | host | upload_id |
|----------|--------|------|------|------|-----------|
|        6 |  Title | Desc |    0 |  cnn |         0 |

SQL 중간

이 작업을 수행해야 합니다.

SELECT v.*,  if( up.upload_key = 'send', up.upload_value, 0 ) AS send,  
    MAX(if( up.upload_key = 'host', up.upload_value, null )) AS host, 
     MAX(if( up.upload_key = 'upload_id', up.upload_value, null )) AS upload_id 
FROM TableInit v JOIN TableName up ON up.video_id =  v.id_video GROUP BY id_video;

방금 추가했습니다.MAXhost 및 upload_id 열의 최대값만 선택하는 함수입니다.

반환된 결과:

+----------+--------+------+------+------+--------------+
| id_video | titulo | desc | send | host | upload_id    |
+----------+--------+------+------+------+--------------+
|        6 | Title  | Desc | 0    | cnn  | sHGN-tSNvJYs |
+----------+--------+------+------+------+--------------+

언급URL : https://stackoverflow.com/questions/54406453/merge-rows-with-different-values-into-a-single-row

반응형