Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggunakan STRING_AGG Pelayan SQL untuk Mendapatkan Nilai Berbeza dan Rentetan Bercantumnya?
Menggunakan STRING_AGG SQL Server untuk Nilai dan Penggabungan Yang Berbeza
Fungsi STRING_AGG SQL Server menggabungkan nilai daripada berbilang baris dengan cekap. Walau bagaimanapun, untuk mendapatkan nilai yang berbeza secara langsung dan rentetan gabungannya memerlukan pendekatan yang sedikit lebih kompleks. Cabarannya terletak pada menggabungkan fungsi COUNT(DISTINCT ...)
dengan pengagregatan rentetan.
Penyelesaian biasa melibatkan proses pengelompokan dua langkah. Klausa GROUP BY
pertama mengenal pasti gabungan unik lajur yang berkaitan (cth., Negeri, Bandar, Penempatan), menghapuskan pendua. GROUP BY
kedua kemudian mengagregatkan gabungan unik ini, menggunakan STRING_AGG untuk menggabungkan nilai yang berbeza. Kaedah ini menyediakan kedua-dua kiraan nilai yang berbeza dan rentetan bercantum.
Berikut ialah contoh yang menunjukkan teknik ini:
<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(*) AS [# Of Sitings], STRING_AGG(Siting, ',') AS Animals FROM CTE_Animals GROUP BY State, City ORDER BY State, City;</code>
Pertanyaan ini menghasilkan set hasil yang menunjukkan penampakan haiwan yang berbeza setiap bandar dan negeri:
<code>+---------+-----------+--------------+----------+ | State | City | # Of Sitings | Animals | +---------+-----------+--------------+----------+ | Arizona | Flagstaff | 1 | dog | | Arizona | Phoenix | 2 | bird,dog | | Florida | Orlando | 2 | bird,dog | +---------+-----------+--------------+----------+</code>
Mengendalikan Rentetan Panjang:
Jika rentetan peletakan yang digabungkan melebihi had 8000 aksara varchar
, secara eksplisit menghantar lajur Siting
ke varchar(max)
sebelum menggunakan STRING_AGG
adalah perlu untuk mengelakkan pemotongan:
<code class="language-sql">STRING_AGG(CAST(Siting AS VARCHAR(MAX)), ',') AS Animals</code>
Ini memastikan rentetan yang digabungkan dapat menampung hasil yang lebih panjang.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan STRING_AGG Pelayan SQL untuk Mendapatkan Nilai Berbeza dan Rentetan Bercantumnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!