Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL清理帮助-基于其他列值创建列_Mysql_Sql - Fatal编程技术网

Mysql SQL清理帮助-基于其他列值创建列

Mysql SQL清理帮助-基于其他列值创建列,mysql,sql,Mysql,Sql,我正在处理一个相对较大的数据集—我正在尝试基于其他列条目在该表中创建新列 例如,我有两列,分别命名为Feature和FeatureValue。在Feature中存在不同的功能,即眼睛、鼻子、嘴巴等。我试图使Feature列中的每个唯一值成为一个新列,其中包含FeatureValue中的相应条目。为了解释,如果第43行的Feature中的值为'Eyes',FeatureValue中的值为'Blue',我希望Eyes作为列标题,Blue作为条目 我非常感谢任何帮助 我猜测一下为什么要执行此操作—我假

我正在处理一个相对较大的数据集—我正在尝试基于其他列条目在该表中创建新列

例如,我有两列,分别命名为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语言。你所要求的是“透视表”的名称,而且也很混乱。考虑将属性保持为与实体关联的行中的列标头和值。