我試圖理解這個查詢陳述句。
write a query to show % of total profit that the top 10% of businesses generated.
1st:從所有業務中獲得總利潤
2nd:獲得非常單一的業務產生的所有利潤的百分比
3rd: 按 desc 排序利潤百分比
4th: 獲得前 10 名
這就是我所理解的。
但是在某個地方我認為它不正確我的想法。
誰能建議這個查詢的實際要求是什么?
Note: cant ask back from where I got, because this was in interview :)
謝謝
uj5u.com熱心網友回復:
- 按利潤金額對業務進行排序。
- 占企業總數的前 10%(有或沒有關系)。
- 計算這 10% 的企業的總利潤。
- 將其與 100% 企業的總利潤進行比較。
您可以使用PERCENT_RANK分析功能按利潤順序對企業進行百分比排名,然后使用條件聚合將利潤前 10% 的企業的利潤相加,并將其與總利潤進行比較,以獲得利潤百分比前10%的企業:
SELECT SUM(CASE WHEN pct_rnk <= 0.1 THEN profit END)
/ SUM(profit) * 100 AS percent_profit_for_top_10_percent
FROM (
SELECT profit,
PERCENT_RANK() OVER (ORDER BY profit DESC) AS pct_rnk
FROM businesses
)
您還可以使用:
SELECT (SELECT SUM(profit)
FROM (
SELECT profit
FROM businesses
ORDER BY profit DESC
FETCH FIRST 10 PERCENT ROWS WITH TIES
)
)
/
(SELECT SUM(profit)
FROM businesses)
* 100 AS percent_profit_for_top_10_percent
FROM DUAL;
其中,對于樣本資料:
CREATE TABLE businesses (profit) AS
SELECT 1000 FROM DUAL CONNECT BY LEVEL <= 10 UNION ALL
SELECT 2000 FROM DUAL CONNECT BY LEVEL <= 8 UNION ALL
SELECT 3000 FROM DUAL CONNECT BY LEVEL <= 6 UNION ALL
SELECT 4000 FROM DUAL CONNECT BY LEVEL <= 4 UNION ALL
SELECT 5000 FROM DUAL CONNECT BY LEVEL <= 2 UNION ALL
SELECT 10000 FROM DUAL CONNECT BY LEVEL <= 1;
兩個輸出:
PERCENT_PROFIT_FOR_TOP_10_PERCENT 45
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422057.html
標籤:
上一篇:從另一個表中排除一個表中的字串
