oracle 分析函數——ration_to_report 求佔有率(百分比)

來源:互聯網
上載者:User

標籤:表資料   comm   name   feedback   方法   delete   tab   init   prompt   

oracle 的分析函數有很多,但是這個函數總是會忘記,我想通過這種方式能讓自己記起來,不至於下次還要百度。

創表、表資料(平時練手的表):

prompt PL/SQL Developer import fileprompt Created on 2018年7月5日 星期四 by Administratorset feedback offset define offprompt Creating CKX001...create table CKX001(  ID      VARCHAR2(20) not null,  NAME    VARCHAR2(20) not null,  SEX     VARCHAR2(20) not null,  SARL    VARCHAR2(20),  ADDRESS VARCHAR2(500),  TIME    DATE)tablespace USERS  pctfree 10  initrans 1  maxtrans 255  storage  (    initial 64K    next 8K    minextents 1    maxextents unlimited  );prompt Disabling triggers for CKX001...alter table CKX001 disable all triggers;prompt Deleting CKX001...delete from CKX001;commit;prompt Loading CKX001...insert into CKX001 (ID, NAME, SEX, SARL, ADDRESS, TIME)values (‘004‘, ‘周潤發‘, ‘1‘, ‘2000‘, ‘廣場‘, null);insert into CKX001 (ID, NAME, SEX, SARL, ADDRESS, TIME)values (‘005‘, ‘周星馳‘, ‘1‘, ‘1500‘, ‘商場‘, null);insert into CKX001 (ID, NAME, SEX, SARL, ADDRESS, TIME)values (‘006‘, ‘梁朝偉‘, ‘1‘, ‘1700‘, ‘大街‘, null);insert into CKX001 (ID, NAME, SEX, SARL, ADDRESS, TIME)values (‘001‘, ‘楊千嬅‘, ‘2‘, ‘2000‘, null, to_date(‘15-05-2018 10:54:19‘, ‘dd-mm-yyyy hh24:mi:ss‘));insert into CKX001 (ID, NAME, SEX, SARL, ADDRESS, TIME)values (‘002‘, ‘張柏芝‘, ‘2‘, ‘1000‘, ‘中心公園‘, to_date(‘15-05-2018 10:54:19‘, ‘dd-mm-yyyy hh24:mi:ss‘));insert into CKX001 (ID, NAME, SEX, SARL, ADDRESS, TIME)values (‘003‘, ‘黎姿‘, ‘2‘, ‘1200‘, ‘河馬公寓‘, to_date(‘12-05-2018 10:54:44‘, ‘dd-mm-yyyy hh24:mi:ss‘));commit;prompt 6 records loadedprompt Enabling triggers for CKX001...alter table CKX001 enable all triggers;set feedback onset define onprompt Done.

現在我們要查詢每個人的工資佔平均工資的百分比:

不會用ration_to_reropt的時候總是要用笨的方法,因為我們要求出每個人佔總工資的百分比首先要的到總工資,然後在那每個人的去除得到,

類似:

select name,round(sarl/(select sum(sarl) from ckx001),4)*100||‘%‘ salratio from ckx001;

效果雖然能夠達到,但是我們像沒有想過實際開發中的資料是來自沒多張表,就像做過一個扯蛋的需求,資料來自人員資訊表和其他十八張檔案表的這種設計,

其實還是當初表設計的人腦子裡有坑,雖然十八章表欄位有所不同,課大部分完全可以設計到一張表去,然後用一個檔案Type的欄位去區分就好了,跑偏了,

總之我要說的是這個求百分比的SQL可能基準資料來的就非常困難,並不想我們例子上這個是來自一張表,所以也就很easy,我當時也就是看到自己噁心的SQL

時想簡化他,最起碼要美觀簡潔,偶爾也可以裝個逼。

像這樣:

select name,round(ratio_to_report(sarl) over(),4)*100||‘%‘ salratio from ckx001;

上下兩條SQL的效果是一樣的,但是黨我們的基礎資料來自很複雜的sql是,下面這種分析函數的使用會讓你的SQL乾淨而又整潔。

 

oracle 分析函數——ration_to_report 求佔有率(百分比)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.