programing

중복된 이름의 ID를 별도의 열로 이동하는 방법

lastmoon 2023. 7. 1. 09:20
반응형

중복된 이름의 ID를 별도의 열로 이동하는 방법

중복 이름이 두 개인 MySQL 테이블이 있는데 중복 이름의 ID를 별도의 열로 구분하려면 어떻게 해야 합니까?

   ---------------------------------
   | id   | name       | surname   |
   ---------------------------------     
   |  557 | Logan      | Smith     |
   | 1052 | Logan      | Smith     |
   ---------------------------------

예를 들어, 다음과 같습니다.

   ----------------------------------------
   | id   |  id2  | name      | surname   |
   ----------------------------------------     
   | 557  |  1052 | Logan     | Smith     |
   ----------------------------------------

첫 번째 테이블의 현재 결과를 검색하기 위한 현재 SQL 문입니다.

SELECT userid as id, name, surname
FROM user
WHERE name = "Logan"
GROUP BY userid

각 이름에는 최대 하나의 중복만 있습니다.

감사해요.

최대값이 항상 2인 것이 확실한 경우...그러면 다음과 같이 할 수 있습니다.

SELECT min(userid) as id1, max(userid) as id2, name, surname
FROM user
WHERE name = "Logan"
GROUP BY name, surname

쿼리를 조금 더 세분화하려면

SELECT min(userid) as id1,
  case when min(userId) = max(userid) then null else max(userId) end as id2, name, surname
FROM user
WHERE name = "Logan"
GROUP BY name, surname

다음과 같은 것을 사용할 수 있습니다.

with cte as (
   select 
       row_number() over (partition by name, surname order by user_id)  rn, 
       name,
       surname,
       user_id
    from tt
)
select 
   name,
   surname,
  max(case when rn=1 then user_id end) as id_1, 
  max(case when rn=2 then user_id end) as id_2 
from cte 
group by name, surname

언급URL : https://stackoverflow.com/questions/70698117/how-to-move-id-of-duplicate-names-to-a-separate-column

반응형