首頁 >資料庫 >mysql教程 >如何使用 SQL 的 GROUP BY 子句將列值組合成逗號分隔的清單?

如何使用 SQL 的 GROUP BY 子句將列值組合成逗號分隔的清單?

Linda Hamilton
Linda Hamilton原創
2025-01-14 08:07:501020瀏覽

How Can I Combine Column Values into a Comma-Separated List Using SQL's GROUP BY Clause?

使用 GROUP BY 聚合資料:建立逗號分隔清單

SQL 的 GROUP BY 子句對於基於共享列值對行進行分組和應用聚合函數非常有用。 常見的應用程式是將單一列中的值組合成每個群組的單一逗號分隔字串。

讓我們用一個範例表來說明:

<code>ID  User  Activity  PageURL  
1  Me    act1      ab     
2  Me    act1      cd     
3  You   act2      xy     
4  You   act2      st</code>

我們的目標是按 UserActivity 分組,連接每組的 PageURL 值。 所需的輸出:

<code>User  Activity  PageURL  
Me    act1      ab, cd     
You   act2      xy, st</code>

使用 STUFF() 的 SQL Server 解決方案

在 SQL Server 中,我們可以使用 GROUP BYSTUFF() 函數來實現此目的:

<code class="language-sql">SELECT
    [User], 
    Activity,
    STUFF(
        (SELECT DISTINCT ',' + PageURL
         FROM TableName
         WHERE [User] = a.[User] AND Activity = a.Activity
         FOR XML PATH (''))
        , 1, 1, '') AS URLList
FROM TableName AS a
GROUP BY [User], Activity</code>

說明:

  • GROUP BY [User], Activity:依照 UserActivity 的唯一組合來分組。
  • 子查詢: 內部 SELECT 語句擷取每個群組的不同 PageURL 值。 ',' PageURL 在每個 URL 前面加上一個逗號。
  • FOR XML PATH(''):這會將結果集轉換為單一字串,有效地用逗號連接 URL。
  • STUFF(..., 1, 1, ''):這會刪除子查詢新增的前導逗號,從而產生乾淨的逗號分隔清單。

結論:

此方法有效地將列值組合到由 GROUP BY 子句定義的每個群組內的逗號分隔清單中。這是 SQL Server 中資料匯總和操作的通用技術。 請注意,字串連接的特定函數可能會因您的資料庫系統而略有不同(例如 MySQL 中的 GROUP_CONCAT)。

以上是如何使用 SQL 的 GROUP BY 子句將列值組合成逗號分隔的清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn