Mengira Peratusan dalam Penyata SQL
Soalan:
Jadual SQL Server mengandungi pengguna nama dan gred mereka. Bagaimanakah satu pernyataan SQL boleh mengira peratusan semua nilai gred yang mungkin (cth., A, B, C)? Selain itu, adakah mungkin untuk mencapai ini tanpa mentakrifkan semua gred yang mungkin secara eksplisit, memandangkan pengguna boleh memasukkan respons terbuka seperti 'lulus/gagal' atau 'tiada'?
Jawapan:
Pilihan 1: Menggunakan over()
select Grade, count(*) * 100.0 / sum(count(*)) over() from MyTable group by Grade
Penyelesaian ini adalah yang paling cekap dan menggunakan fungsi over().
Pilihan 2: Universal (Sebarang Versi SQL)
select Grade, count(*) * 100.0 / (select count(*) from MyTable) from MyTable group by Grade;
Pilihan ini berfungsi untuk mana-mana versi SQL tetapi mungkin kurang cekap daripada yang sebelumnya satu.
Pilihan 3: Dengan CTE (Kurang Cekap)
with t(Grade, GradeCount) as ( select Grade, count(*) from MyTable group by Grade ) select Grade, GradeCount * 100.0/(select sum(GradeCount) from t) from t;
Walaupun kaedah ini menyediakan penyelesaian yang fleksibel, ia adalah yang paling tidak cekap.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengira Peratusan Gred dalam SQL Tanpa Mentakrifkan Semua Gred Yang Mungkin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!