ホームページ >データベース >mysql チュートリアル >SQL の GROUP BY を使用して、ユーザーとアクティビティに基づいてページ URL を単一のカンマ区切りの文字列に結合するにはどうすればよいですか?

SQL の GROUP BY を使用して、ユーザーとアクティビティに基づいてページ URL を単一のカンマ区切りの文字列に結合するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-14 06:01:44475ブラウズ

How Can I Combine Page URLs into a Single Comma-Separated String Based on User and Activity Using SQL's GROUP BY?

SQL の GROUP BY を使用したページ URL の集計

データベース テーブルには、UserActivity、および PageURL 列が含まれています。 目標は、一意の PageURLUser の組み合わせごとに Activity エントリを単一のカンマ区切り文字列に統合することです。

これは、GROUP BY を文字列集約手法と組み合わせて使用​​することで実現できます。 その方法は次のとおりです:

<code class="language-sql">SELECT
    User,
    Activity,
    STRING_AGG(PageURL, ',') AS CombinedPageURLs
FROM
    TableName
GROUP BY
    User,
    Activity;</code>

このクエリは、STRING_AGG 関数 (PostgreSQL、SQL Server 2017 以降などの多くの最新 SQL 言語で利用可能) を直接使用して、PageURLUser で定義された各グループ内の Activity 値を連結します。 結果のカンマ区切り文字列は CombinedPageURLs 列に割り当てられます。

STRING_AGG を使用しない SQL 方言の代替:

SQL データベースが STRING_AGG をサポートしていない場合は、FOR XML PATH:

を使用した同様のアプローチを使用できます。
<code class="language-sql">SELECT
    User,
    Activity,
    STUFF((
        SELECT ',' + PageURL
        FROM TableName t2
        WHERE t2.User = t1.User AND t2.Activity = t1.Activity
        FOR XML PATH('')
    ), 1, 1, '') AS CombinedPageURLs
FROM
    TableName t1
GROUP BY
    User,
    Activity;</code>

この代替案では、FOR XML PATH('') を含むサブクエリを使用してカンマ区切りの文字列を作成し、STUFF で先頭のカンマを削除します。 この方法は、古いバージョンの SQL Server と互換性があります。 特定のデータベース スキーマに一致するようにテーブル名と列名を変更することを忘れないでください。 出力には、集約された URL を含む CombinedPageURLs 列が表示されます。

以上がSQL の GROUP BY を使用して、ユーザーとアクティビティに基づいてページ URL を単一のカンマ区切りの文字列に結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。