SQL使用唯一键将多行合并为一行

Posted

技术标签:

【中文标题】SQL使用唯一键将多行合并为一行【英文标题】:SQL merge numerous rows into one single row using unique key 【发布时间】:2021-07-24 10:37:07 【问题描述】:

我的表(用户)中有类似这样的数据如您所见,user_id 9 已用某些元数据填充了许多行。该用户的 user_id 记录了 39 个不同的 meta_values,共 39 行。

user_id meta_key meta_value
9 first_name Gilda
9 last_name Lilia
9 Email test@test.com

我真的很想转换数据,使输出看起来像这样。

user_id first_name last_name
9 Gilda Lilia

还有电子邮件,但我不知道如何在上表中显示。

在这个阶段,我有超过 3600 个唯一用户,平均每个用户大约有 40 行。我希望能够根据需要向单行添加不同的元值,所以真的只是为初始查询寻找一些帮助。

非常感谢您的帮助。

【问题讨论】:

将是一个支点。 See this. @PaulT。对,就是那样。然而,我刚刚学到了一个新东西。谢谢 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。 【参考方案1】:

以下查询对我有帮助。在这里,我将表名命名为 temp_user,您需要更改。

select [user_id],first_name, last_name, Email
from
(
  select [user_id],meta_key, meta_value
  from temp_user
) d
pivot
(
  MAX(meta_value)
  for meta_key in (first_name, last_name , Email)
) piv;

【讨论】:

【参考方案2】:

在你的数据库中创建一个表添加 4 行(这里你想创建多少就创建多少)

1st row usersID 
2nd row firstname
3rd row lastname
And 4th row called email

进入你的编辑器 现在连接您的数据库插入值 像这样 *INSERT INTO your table name(userId, firstname, lastname, email) VALUES (从你的表单 htmlphp 添加值)

【讨论】:

【参考方案3】:

我会推荐条件聚合:

select user_id,
       max(case when meta_key = 'first_name' then meta_value end)as first_name,
       max(case when meta_key = 'last_name' then meta_value end)as last_name,
       max(case when meta_key = 'email' then meta_value end)as email
from t
group by user_id;

如果您想将所有 39 个键作为列,您只需将其扩展为具有 39 个 max(case) 表达式。

【讨论】:

以上是关于SQL使用唯一键将多行合并为一行的主要内容,如果未能解决你的问题,请参考以下文章

如何将共享 id 的多行合并为一行(PYSPARK)

SQL 将一列多行数据合并为一行

SQL 多行多列数据清洗合并为一行

SQL多行合并为一行,SQL语句如何写

T_SQL 将一列多行数据合并为一行

sql 将查询结果为多行一列合并为一行一列