[英]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.