ホームページ >データベース >mysql チュートリアル >SQL Server の STRING_AGG 関数で重複を排除するにはどうすればよいですか?

SQL Server の STRING_AGG 関数で重複を排除するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-24 07:02:10632ブラウズ

SQL Server の STRING_AGG 関数: 重複値の削除

この記事では、SQL Server 2017 以降のバージョンの STRING_AGG 関数内の重複値を排除するという課題について説明します。 標準の STRING_AGG 関数は、一意の値の集計のための DISTINCT キーワードを直接サポートしていません。

How to Eliminate Duplicates in SQL Server's STRING_AGG Function?

問題: DISTINCTSTRING_AGG を直接使用して一意の値をカウントして連結することはできません。

目標: STRING_AGG.

を使用して一意の値の連結文字列を生成します。

例:

SitingsStateCity 列を持つ Siting テーブルを考えてみましょう。

<code>ID | State    | City      | Siting
---------------------------------
1  | Florida  | Orlando   | bird
2  | Florida  | Orlando   | dog
3  | Arizona  | Phoenix   | bird
4  | Arizona  | Phoenix   | dog
5  | Arizona  | Phoenix   | bird
6  | Arizona  | Phoenix   | bird
7  | Arizona  | Phoenix   | bird
8  | Arizona  | Flagstaff | dog</code>

COUNT(DISTINCT Siting)STRING_AGG(Siting, ',') を使用した単純なクエリでは次の結果が得られます。

State City # Of Types Animals
Arizona Flagstaff 1 dog
Florida Orlando 2 dog,bird
Arizona Phoenix 2 bird,bird,bird,dog,bird

ただし、目的の出力では、フェニックスの「動物」列から重複を削除する必要があります。

State City # Of Types Animals
Arizona Flagstaff 1 dog
Florida Orlando 2 dog,bird
Arizona Phoenix 2 bird,dog

解決策: 二重グループ化アプローチ

これを実現するために、共通テーブル式 (CTE) を使用した 2 段階のグループ化プロセスを利用します。

<code class="language-sql">WITH Sitings AS (
    SELECT * FROM (VALUES 
    (1, 'Florida', 'Orlando', 'bird'),
    (2, 'Florida', 'Orlando', 'dog'),
    (3, 'Arizona', 'Phoenix', 'bird'),
    (4, 'Arizona', 'Phoenix', 'dog'),
    (5, 'Arizona', 'Phoenix', 'bird'),
    (6, 'Arizona', 'Phoenix', 'bird'),
    (7, 'Arizona', 'Phoenix', 'bird'),
    (8, 'Arizona', 'Flagstaff', 'dog')
    ) AS F (ID, State, City, Siting)
),
CTE_Animals AS (
    SELECT
        State, City, Siting
    FROM Sitings
    GROUP BY State, City, Siting
)
SELECT
    State, City, COUNT(1) AS [# Of Sitings], STRING_AGG(Siting,',') AS Animals
FROM CTE_Animals
GROUP BY State, City
ORDER BY
    State, City;</code>

結果: このクエリは目的の出力を正常に生成します:

State City # Of Sitings Animals
Arizona Flagstaff 1 dog
Arizona Phoenix 2 bird,dog
Florida Orlando 2 dog,bird

この二重グループ化手法では、最初に StateCitySiting でグループ化して各都市内の重複を排除し、次に StateCity で再度グループ化して固有の場所を連結します。

以上がSQL Server の STRING_AGG 関数で重複を排除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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