翻譯|行業資訊|編輯:董玉霞|2022-03-09 15:58:04.240|閱讀 528 次
概述:在使用過程中,很多時候希望查看一行(或一組行)對總行數的相對貢獻,換句話說,一行代表的總計數的百分比。為了顯示更清楚,我們查看下面表格,它顯示在Navicat Premium最新版本中
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在使用Navicat Premium過程中,很多時候希望查看一行(或一組行)對總行數的相對貢獻,換句話說,一行代表的總計數的百分比。為了顯示更清楚,我們查看下面表格,它顯示在Navicat Premium最新版本中:
通過結合 count() 函數和 Group By 子句,我們可以很容易地找出每種水果收到了多少訂單:
那么現在,我們如何查看每種水果的訂單占訂單總數的百分比?事實上,在 SQL 中計算行百分比有三種標準方法。他們是:
我們將依次進行探討。
OVER 子句主要與窗口函數一起使用,用于確定將查詢中的哪些行應用于函數、該函數以什么順序計算它們以及何時重新開始函數的計算。
OVER 子句是 SQL 中計算行百分比的最有效方法,因此如果您優先考慮效率,它應該是您的首選。這是獲得百分比的公式:
count(*) * 100.0 / sum(count(*)) over()
將上述 SQL 添加到我們的原始查詢中會產生以下結果:
并非所有數據庫都支持 OVER() 子句,因此子查詢方法可能是非常有價值的后備解決方案。它有時被稱為“通用解決方案”,因為它適用于所有數據庫。這種方法的另一個好處是它也最容易與 Round() 等函數合并。這是我們需要添加到查詢中的內容:
count(*) * 100.0 / (從中選擇 count(*))
這是通用的解決方案:
With common_table_expression子句指定一個臨時命名結果集,稱為公用表表達式 (CTE)。然后,我們可以從臨時結果集中進行選擇,以將更多函數應用于檢索到的字段。在我們的例子中,我們可以將 sum() 函數應用于計數以獲得百分比:
這種方法效率最低,因為 CTE 基本上針對內部(初始)結果運行第二個查詢。話雖如此,有時您可能需要使用 CTE 執行無法一次性輕松完成的額外處理。
在這篇教程中,我們學習了三種方法來表示一行(或一組行)對總行數的相對貢獻百分比。每種方法都有自己的優點和缺點,您可以根據自己的具體要求選擇一種。如果想試用Navicat Premium正版,可以在這里下載,14天全功能免費試用。
Navicat Premium是一個可連接多種數據庫的管理工具,它可以讓你以單一程序同時連接到MySQL、Oracle及PostgreSQL數據庫,讓管理不同類型的數據庫更加的方便。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn