ホームページ >データベース >mysql チュートリアル >SQL Server の STRING_AGG 関数で重複を排除するにはどうすればよいですか?
SQL Server の STRING_AGG
関数: 重複値の削除
この記事では、SQL Server 2017 以降のバージョンの STRING_AGG
関数内の重複値を排除するという課題について説明します。 標準の STRING_AGG
関数は、一意の値の集計のための DISTINCT
キーワードを直接サポートしていません。
問題: DISTINCT
と STRING_AGG
を直接使用して一意の値をカウントして連結することはできません。
目標: STRING_AGG
.
例:
Sitings
、State
、City
列を持つ 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 |
この二重グループ化手法では、最初に State
、City
、Siting
でグループ化して各都市内の重複を排除し、次に State
と City
で再度グループ化して固有の場所を連結します。
以上がSQL Server の STRING_AGG 関数で重複を排除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。