溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

通用的行列轉(zhuǎn)換的方法

發(fā)布時(shí)間:2020-08-10 13:33:54 來源:ITPUB博客 閱讀:137 作者:paomananshan 欄目:關(guān)系型數(shù)據(jù)庫
在工作中經(jīng)常需要用到行列轉(zhuǎn)換進(jìn)行聚合統(tǒng)計(jì)之類的事兒,現(xiàn)在就說一個(gè)最簡(jiǎn)單最通用的方法, 適應(yīng)sum()/max()/min()等函數(shù)結(jié)合decode來實(shí)現(xiàn)行列轉(zhuǎn)換, 拿oracle中典型的scott.emp表為例, 

點(diǎn)擊(此處)折疊或打開

  1. SQL> SELECT * FROM SCOTT.EMP ;
  2. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  3. ----- ---------- --------- ----- ----------- --------- --------- ------
  4.  7369 SMITH CLERK 7902 1980/12/17 800.00 20
  5.  7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
  6.  7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30
  7.  7566 JONES MANAGER 7839 1981/4/2 2975.00 20
  8.  7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30
  9.  7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
  10.  7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
  11.  7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
  12.  7839 KING PRESIDENT 1981/11/17 5000.00 10
  13.  7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30
  14.  7876 ADAMS CLERK 7788 1987/5/23 1100.00 20
  15.  7900 JAMES CLERK 7698 1981/12/3 950.00 30
  16.  7902 FORD ANALYST 7566 1981/12/3 3000.00 20
  17.  7934 MILLER CLERK 7782 1982/1/23 1300.00 10
  18. 14 rows selected
現(xiàn)在如果想要按照部門統(tǒng)計(jì)一下, 各個(gè)manager下的員工的平均薪水(或者最高薪水、最低、合計(jì)薪水),這樣就使用到了行列轉(zhuǎn)換, 可做如下操作來實(shí)現(xiàn): 

點(diǎn)擊(此處)折疊或打開

  1. SQL> select deptno ,
  2.   2 avg(decode(mgr,'7566' ,sal,0)) jones ,
  3.   3 avg(decode(mgr,'7698' , sal,0)) BLAKE ,
  4.   4 avg(decode(mgr,'7782' ,sal,0)) CLARK ,
  5.   5 avg(decode(mgr,'7788' , sal,0)) SCOTT ,
  6.   6 avg(decode(mgr,'7839' , sal,0)) KING ,
  7.   7 avg(decode(mgr,'7902' , sal,0)) FORD
  8.   8 from scott.emp
  9.   9 group by deptno
  10.  10 ;
  11. DEPTNO JONES BLAKE CLARK SCOTT KING FORD
  12. ------ ---------- ---------- ---------- ---------- ---------- ----------
  13.     30 0 1091.66666 0 0 475 0
  14.     20 1200 0 0 220 595 160
  15.     10 0 0 433.333333 0 816.666666 0

可以看到很容易的實(shí)現(xiàn)了數(shù)據(jù)的統(tǒng)計(jì)。 
當(dāng)然行列的轉(zhuǎn)換的方法還有其他幾種, 如使用case when ,或者使用wmsys.wm_concat函數(shù)都都可以實(shí)現(xiàn)。 不過上面的方法算是最容易理解了的吧。



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI