|
本帖最后由 caroline0803 于 2014-4-4 22:04 编辑
楼主好。我这里遇到一个问题,请楼主帮忙看下把,感谢楼主。
如下,需要从多个表中进行统计,如下面的SQL语句所示,EMP1,EMP2,EMP3,EMP4代表,需要从四个业务表中,统计不同维度的值,
应该用哪种方式,能够提高效率呢;
第一种:
SELECT t1.deptno,
(SELECT COUNT(1) FROM emp1 t WHERE t1.deptno = t.deptno) EMP1_COUNT,
(SELECT SUM(SAL) FROM emp1 t WHERE t1.deptno = t.deptno) EMP1_SAL,
(SELECT COUNT(1) FROM emp2 t WHERE t1.deptno = t.deptno) EMP2_COUNT,
(SELECT SUM(SAL) FROM emp2 t WHERE t1.deptno = t.deptno) EMP2_SAL,
(SELECT COUNT(1) FROM emp3 t WHERE t1.deptno = t.deptno) EMP3_COUNT,
(SELECT SUM(SAL) FROM emp3 t WHERE t1.deptno = t.deptno) EMP3_SAL,
(SELECT COUNT(1) FROM emp4 t WHERE t1.deptno = t.deptno) EMP4_COUNT,
(SELECT SUM(SAL) FROM emp4 t WHERE t1.deptno = t.deptno) EMP4_SAL
FROM dept t1
GROUP BY t1.deptno;
第二种:
explain plan FOR
WITH A AS
(SELECT COUNT(DEPTNO) AS COUNTS_1, DEPTNO, SUM(SAL) AS SAL1 FROM emp1 GROUP BY DEPTNO),
T2 AS
(SELECT COUNT(DEPTNO) AS COUNTS_2, DEPTNO, SUM(SAL) AS SAL2 FROM emp2 GROUP BY DEPTNO),
t3 AS
(SELECT COUNT(DEPTNO) AS COUNTS_3, DEPTNO, SUM(SAL) AS SAL4 FROM emp3 GROUP BY DEPTNO),
t4 AS
(SELECT COUNT(DEPTNO) AS COUNTS_4, DEPTNO, SUM(SAL) AS SAL4 FROM emp4 GROUP BY DEPTNO)
SELECT *
FROM DEPT T1
LEFT JOIN A
ON T1.DEPTNO = A.DEPTNO
LEFT JOIN T2
ON T1.DEPTNO = T2.DEPTNO
LEFT JOIN T3
ON T1.DEPTNO = T3.DEPTNO
LEFT JOIN T4
ON T1.DEPTNO = T4.DEPTNO;
第三种:
SELECT *
FROM DEPT T1
LEFT JOIN (SELECT COUNT(DEPTNO) AS COUNTS_1, DEPTNO, SUM(SAL) AS SAL1 FROM emp1 GROUP BY DEPTNO) A
ON T1.DEPTNO = A.DEPTNO
LEFT JOIN (SELECT COUNT(DEPTNO) AS COUNTS_2, DEPTNO, SUM(SAL) AS SAL2 FROM emp2 GROUP BY DEPTNO) T2
ON T1.DEPTNO = T2.DEPTNO
LEFT JOIN (SELECT COUNT(DEPTNO) AS COUNTS_3, DEPTNO, SUM(SAL) AS SAL4 FROM emp3 GROUP BY DEPTNO) T3
ON T1.DEPTNO = T3.DEPTNO
LEFT JOIN (SELECT COUNT(DEPTNO) AS COUNTS_4, DEPTNO, SUM(SAL) AS SAL4 FROM emp4 GROUP BY DEPTNO) T4
ON T1.DEPTNO = T4.DEPTNO
那种方式可以更好呢,我觉得第一种方式较好,
原帖见:http://www.itpub.net/thread-1854190-1-1.html
|
|