Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengira Peratusan Gred dalam SQL Tanpa Mentakrifkan Semua Gred Yang Mungkin?

Bagaimanakah Saya Boleh Mengira Peratusan Gred dalam SQL Tanpa Mentakrifkan Semua Gred Yang Mungkin?

DDD
DDDasal
2025-01-17 04:06:10173semak imbas

How Can I Calculate Grade Percentages in SQL Without Predefining All Possible Grades?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn