簡體   English   中英

SQL 清理幫助 - 根據其他列值創建列

[英]SQL Cleanup Help - Creating columns based off other column values

我正在使用一個相對較大的數據集 - 我正在嘗試根據其他列條目在該表中創建新列。

例如,我有兩列名為 Feature 和 FeatureValue。 在特征中存在不同的特征,即眼睛、鼻子、嘴巴等。我試圖使特征列中的每個唯一值成為一個新列,其中包含來自特征值的相應條目。 為了解釋,如果第 43 行在 Feature 中保存值“Eyes”,在 FeatureValue 中保存值“Blue” - 我希望 Eyes 作為列 header 和 Blue 作為條目。

我非常感謝任何幫助!

我對您為什么要執行此操作進行了一些猜測 - 我假設您需要加快獲取特定功能值的查詢。 如果這是為了性能,那么可能有比這更好的解決方案,但這里我們 go...

如果我理解正確,您需要每個功能的所有值的列表。 但是,我不確定您的結果作為表格是否有意義。 為了解決這個問題,讓我們從一個名為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 方法,以防我誤解了您的目標。

為了提高性能,您可以定期緩存此查詢 - 我不確定您計划多久重建一次列表。

如果您確實需要將其作為帶有列的表,那將變得更加棘手,而且老實說,在代碼中可能比開發單個查詢更容易完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM