MySQL sum后再計(jì)算percentage的多種解決辦法
over() 函數(shù),最簡(jiǎn)單的一種
以下是SQL片段,在外面嵌套一個(gè)Select是因?yàn)閛ver 不會(huì)SQL語(yǔ)句所有的data sum,而不是 limit 之后的數(shù)據(jù),所以需要先limit 在over()
SELECT b.*, ROUND(b.amount*100 / SUM(b.amount) OVER(),2) AS inv_salesShare FROM ( SELECT cm_cust_no, cm_co_name, SUM ( amount ) AS amount FROM
Cross Join
通過(guò)cross join 把total 作為一個(gè)結(jié)果集并到sum的sql,然后通過(guò)除法計(jì)算Percentage。
SELECT
P.PersonID, SUM(PA.Total)
SUM(PA.Total) * 100 / [p] AS 'Percentage'
FROM
Person P
JOIN
Package PA ON P.PersonID = PA.PackageFK
CROSS JOIN
(SELECT SUM(PA.[Total]) AS [p]
FROM Package PA) t
GROUP BY
P.PersonID通過(guò)兩個(gè)Select 嵌套查詢
這種方法適合簡(jiǎn)單Case,如果條件復(fù)雜時(shí),第二個(gè)Select就會(huì)臃腫,比如 增加 時(shí)間條件、Group,Limit等。
SELECT PA.PersonID, SUM(PA.Total),
SUM(PA.Total) * 100.0 / (SELECT SUM(PA.Total) FROM PA)
FROM Package PA
GROUP BY PA.PersonID;通過(guò)with 函數(shù)處理
此方法簡(jiǎn)單,分塊處理,一些復(fù)雜的SQL可以考慮使用with方法處理。
有時(shí)間驗(yàn)證下
;WITH PersonTotals AS ( SELECT P.PersonID, SUM(CAST(PA.Total AS MONEY)) Total FROM Person P JOIN Package PA ON P.PersonID = PA.PackageFK GROUP BY P.PersonID ), GrandTotal AS ( SELECT SUM(PT.Total) Total FROM PersonTotals PT ) SELECT PT.*, (PT.Total / NULLIF((SELECT Total From GrandTotal),0)) * 100 Percentage FROM PersonTotals PT
到此這篇關(guān)于MySQL sum后再計(jì)算percentage的多種解決辦法的文章就介紹到這了,更多相關(guān)MySQL計(jì)算percentage內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺析MySQL如何實(shí)現(xiàn)事務(wù)隔離
使用過(guò)關(guān)系型數(shù)據(jù)庫(kù)的,應(yīng)該都事務(wù)的概念有所了解,知道事務(wù)有 ACID 四個(gè)基本屬性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),今天我們主要來(lái)理解一下事務(wù)的隔離性2021-06-06
Mysql8創(chuàng)建用戶及賦權(quán)操作實(shí)戰(zhàn)記錄
一般在開(kāi)發(fā)中,我們需要新建一個(gè)賬戶,并賦予某個(gè)數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限,下面這篇文章主要給大家介紹了關(guān)于Mysql8創(chuàng)建用戶及賦權(quán)操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
MySQL?數(shù)據(jù)庫(kù)中數(shù)據(jù)表超詳細(xì)的基本操作
這篇文章主要介紹了MySQL?數(shù)據(jù)庫(kù)中數(shù)據(jù)表的基本操作,下面文章會(huì)從創(chuàng)建表的基本語(yǔ)法伊利舉例說(shuō)明概括全篇數(shù)據(jù)表的基本操作詳情,需要的小伙伴可以參考一下文章的具體內(nèi)容,希望對(duì)你有所幫助2021-12-12
RedHat8安裝mysql9.1的詳細(xì)過(guò)程
文章主要介紹了如何下載和安裝MySQL?Enterprise?Edition,包括下載地址、安裝順序、啟動(dòng)服務(wù)、修改密碼等步驟,同時(shí),還提到了JDBC的下載地址以及解決Red?Hat?8源問(wèn)題的方法,感興趣的朋友跟隨小編一起看看吧2024-11-11
MySql如何使用not in實(shí)現(xiàn)優(yōu)化
這篇文章主要介紹了MySql如何使用not in實(shí)現(xiàn)優(yōu)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
SQL-?join多表關(guān)聯(lián)問(wèn)題
這篇文章主要介紹了SQL-?join多表關(guān)聯(lián)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-12-12

