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
Lepaskan: 2025-01-17 04:06:10
asal
172 orang telah melayarinya

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
Salin selepas log masuk

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan