如何将重复名称的 ID 移动到单独的列
How to move ID of duplicate names to a separate column
我有一个 MySQL table 有两个重名,如何将重名的 ID 分开到一个单独的列中?
---------------------------------
| id | name | surname |
---------------------------------
| 557 | Logan | Smith |
| 1052 | Logan | Smith |
---------------------------------
例如,像这样:
----------------------------------------
| id | id2 | name | surname |
----------------------------------------
| 557 | 1052 | Logan | Smith |
----------------------------------------
这是我当前的SQL语句,用于检索第一个table中的当前结果:
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
我有一个 MySQL table 有两个重名,如何将重名的 ID 分开到一个单独的列中?
---------------------------------
| id | name | surname |
---------------------------------
| 557 | Logan | Smith |
| 1052 | Logan | Smith |
---------------------------------
例如,像这样:
----------------------------------------
| id | id2 | name | surname |
----------------------------------------
| 557 | 1052 | Logan | Smith |
----------------------------------------
这是我当前的SQL语句,用于检索第一个table中的当前结果:
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