Mengira Nilai Berbeza Di Atas Partition dengan COUNT() OVER
Mengatasi cabaran mengira nilai yang berbeza apabila menggunakan fungsi partition COUNT() OVER ialah isu biasa dalam SQL Server. Artikel ini meneroka pendekatan alternatif untuk mencapai hasil yang diinginkan menggunakan gabungan dense_rank() dan operasi aritmetik.
Pertanyaan dan Ralat Asal
Pertanyaan asal cuba mengira jumlah menjalankan nilai berbeza menggunakan COUNT(DISTINCT) OVER:
NumUsers = COUNT(DISTINCT [UserAccountKey]) OVER (PARTITION BY [Mth])
Walau bagaimanapun, SQL Server menjana ralat kerana ketidakserasian DISTINCT dengan fungsi partition.
Penyelesaian Alternatif Menggunakan Dense_rank()
Penyelesaian praktikal untuk isu ini adalah dengan menggunakan fungsi dense_rank() bersama-sama dengan aritmetik mudah operasi:
dense_rank() over (partition by [Mth] order by [UserAccountKey]) + dense_rank() over (partition by [Mth] order by [UserAccountKey] desc) - 1
Ungkapan ini mengira jumlah berjalan nilai berbeza dalam setiap bulan. Begini caranya:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengira Nilai Berbeza Dalam Pemisahan dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!