SQL動態百分比計算:高效率且全面
問題:
給定一個包含使用者名稱和成績的SQL表,需要計算每個可能成績的出現百分比。挑戰在於動態地實現這一點,允許任何開放式文字欄位的回應。
解:
使用SQL語句計算百分比主要有三種方法:
方法一:效率最佳化
<code class="language-sql">select Grade, count(*) * 100.0 / sum(count(*)) over() from MyTable group by Grade</code>
此方法效率最高,利用"over()"函數根據整個資料集計算百分比。
方法二:一般適用性
<code class="language-sql">select Grade, count(*) * 100.0 / (select count(*) from MyTable) from MyTable group by Grade;</code>
此方法適用於任何SQL版本,無論是否支援"over()"函數。它根據表中的總行數計算百分比。
方法三:公用表表達式 (CTE)
<code class="language-sql">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;</code>
此方法效率低於前兩種,但在更複雜的計算中可能更有用。它利用CTE獨立計算成績計數和百分比。
以上是如何用SQL動態計算成績百分比?的詳細內容。更多資訊請關注PHP中文網其他相關文章!