Mysql SQL清理帮助-基于其他列值创建列
我正在处理一个相对较大的数据集—我正在尝试基于其他列条目在该表中创建新列 例如,我有两列,分别命名为Feature和FeatureValue。在Feature中存在不同的功能,即眼睛、鼻子、嘴巴等。我试图使Feature列中的每个唯一值成为一个新列,其中包含FeatureValue中的相应条目。为了解释,如果第43行的Feature中的值为'Eyes',FeatureValue中的值为'Blue',我希望Eyes作为列标题,Blue作为条目Mysql SQL清理帮助-基于其他列值创建列,mysql,sql,Mysql,Sql,我正在处理一个相对较大的数据集—我正在尝试基于其他列条目在该表中创建新列 例如,我有两列,分别命名为Feature和FeatureValue。在Feature中存在不同的功能,即眼睛、鼻子、嘴巴等。我试图使Feature列中的每个唯一值成为一个新列,其中包含FeatureValue中的相应条目。为了解释,如果第43行的Feature中的值为'Eyes',FeatureValue中的值为'Blue',我希望Eyes作为列标题,Blue作为条目 我非常感谢任何帮助 我猜测一下为什么要执行此操作—我假
我非常感谢任何帮助 我猜测一下为什么要执行此操作—我假设您需要加快查询速度,以获取特定功能的值。如果这是为了提高性能,那么可能有比这更好的解决方案,但现在我们开始 如果我理解正确,您需要每个功能的所有值的列表。然而,我不确定你的结果作为一张桌子是否有意义。为了解决这个问题,让我们从表中的一个示例数据集开始,我们将其称为
功能
Feature | FeatureValue
-----------------------
Eyes | Blue
Nose | Potato
Eyes | brown
Eyes | blue
Eyes | brown
Nose | pointy
听起来您想要的是一个转换此表的结果表:
Eyes | Nose
------------------
Blue | Potato
brown | pointy
blue |
这对于表来说没有多大意义,因为共享一行的项之间没有关系。我希望您正在尝试优化查询以获得这些列表
首先,使用一个小SQL,它将获得每个功能的值列表:
SELECT Feature, GROUP_CONCAT(DISTINCT FeatureValue) AS `Values` FROM Features GROUP BY Feature;
这将返回与第二个表相同的结果,但是横向的:
Feature | Values
-------------------------
Eyes | Blue,brown,blue
Nose | Potato,pointy
如果查阅,您将看到您可以指定列表中的分隔符、列表的顺序以及一些其他内容。你也可以用不同的方法阅读另一组内容,以防我误解了你的目标
为了提高性能,您可以定期缓存此查询-我不确定您计划多长时间重建一次列表
如果你真的需要这是一个包含列的表,那么这会变得更加棘手,老实说,用代码来实现这一点可能比开发一个查询要容易得多。MySQL(和许多其他数据库)做得很糟糕(),因为它不利于SQL语言。你所要求的是“透视表”的名称,而且也很混乱。考虑将属性保持为与实体关联的行中的列标头和值。