mysql - SQL 清理帮助 - 根据其他列值创建列
问题描述
我正在使用一个相对较大的数据集 - 我正在尝试根据其他列条目在该表中创建新列。
例如,我有两列名为 Feature 和 FeatureValue。在特征中存在不同的特征,即眼睛、鼻子、嘴巴等。我试图使特征列中的每个唯一值成为一个新列,其中包含来自特征值的相应条目。为了解释,如果第 43 行在 Feature 中保存值“Eyes”,在 FeatureValue 中保存值“Blue”——我希望 Eyes 作为列标题,Blue 作为条目。
我非常感谢任何帮助!
解决方案
我对您为什么要执行此操作进行了一些猜测 - 我假设您需要加快获取特定功能值的查询。如果这是为了性能,那么可能有比这更好的解决方案,但是我们开始......
如果我理解正确,您需要每个功能的所有值的列表。但是,我不确定您的结果作为表格是否有意义。为了解决这个问题,让我们从我们将调用的表中的示例数据集开始Features
。
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 文档,您将看到您可以指定列表中的分隔符、列表的顺序以及其他一些内容。您可能还想仔细阅读其他 GROUP_BY 方法,以防我误解了您的目标。
为了提高性能,您可以定期缓存此查询 - 我不确定您计划多久重建一次列表。
如果您确实需要将其作为带有列的表,那将变得更加棘手,而且老实说,在代码中可能比开发单个查询更容易完成。
推荐阅读
- azure - Powershell 无法访问运行时环境变量
- javascript - 如何使用 TypeScript 运行顶级 async / await 函数?
- java - Android MediaPlayer 意外停止播放(未最终确定)
- javascript - 为什么在使用工厂函数和构造函数时,Chrome 控制台中的对象看起来不同?
- vba - 表单/查询对嵌入另一个表单后停止工作
- google-sheets - 批量大小计算数组、商、序列
- r - 在导入其他数值时处理“小于”和“大于”符号的最佳做法是什么?
- flutter - Flutter Widget 中的 didChangeDependencies 钩子包含不准确的类数据
- eclipse - Maven 在 Maven 构建期间未运行生成目标或 Eclipse 中的 Maven 生成源
- python - Pytorch 挤压和解压