2013-12-12 45 views
0

需要在多個表中合計不同的列,然後按不同的列進行分組。mysql在表和組之間合計列

作爲此操作的一部分,嘗試通過以下操作將不同表格中的單列求和。

SELECT SUM(t.Qty) AS total_qty 
    FROM (SELECT Qty FROM MC 
      UNION ALL 
      SELECT Qty FROM Amex) t 

但我需要找到以下

(SUM(t1.ATT)+ SUM(t2.ATT)+ SUM(t3.ATT)+ SUM(t4.ATT)) -

(SUM(t1.RE_ORG)+ SUM(t2.RE_ORG)+ SUM(t3.RE_ORG)+ SUM(t4.RE_ORG))和組通過BSM或日期,小時

不知道如何進一步進行。

任何幫助將不勝感激!

不同的表:T1,T2,T3,T4

mysql> show create table t1\G 
*************************** 1. row ************************* 
     Table: t1 
Create Table: CREATE TABLE `t1` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `BSM` varchar(32) NOT NULL, 
    `Date` date DEFAULT NULL, 
    `Hour` time DEFAULT NULL, 
    `BSC` float DEFAULT NULL, 
    `BTS` float DEFAULT NULL, 
    `SECTOR` float DEFAULT NULL, 
    `BAND` float DEFAULT NULL, 
    `FA` float DEFAULT NULL, 
    `ASSGN_BAND` float DEFAULT NULL, 
    `ATT` float DEFAULT NULL, 
    `RE_ORG` float DEFAULT NULL, 
    `OVD_CMP` float DEFAULT NULL, 
    `OVD_BCP` float DEFAULT NULL, 
    `A1_OOS` float DEFAULT NULL, 
    `CMP_MSC` float DEFAULT NULL, 
    `BS_REL1` float DEFAULT NULL, 
    `MSC_REL1` float DEFAULT NULL, 
    `MOB_REL1` float DEFAULT NULL, 
    `ASR` float DEFAULT NULL, 
    `ATP_UNA` float DEFAULT NULL, 
    `CMP_ATP` float DEFAULT NULL, 
    `CE_UNA` float DEFAULT NULL, 
    `WALSH_UNA` float DEFAULT NULL, 
    `TCH_OVP` float DEFAULT NULL, 
    `SYN_TO` float DEFAULT NULL, 
    `BCP_CEP` float DEFAULT NULL, 
    `CMP_BCP` float DEFAULT NULL, 
    `NOT_ACQ` float DEFAULT NULL, 
    `MS_ATP1` float DEFAULT NULL, 
    `MS_ATP2` float DEFAULT NULL, 
    `SO_REJ` float DEFAULT NULL, 
    `REV_NO_FRM_FROM_CEP2` float DEFAULT NULL, 
    `FWD_NO_FRM_FROM_ATP2` float DEFAULT NULL, 
    `BAD_FRM2` float DEFAULT NULL, 
    `BS_REL2` float DEFAULT NULL, 
    `MSC_REL2` float DEFAULT NULL, 
    `MOB_REL2` float DEFAULT NULL, 
    `ASC1` float DEFAULT NULL, 
    `ASC2` float DEFAULT NULL, 
    `REV_NO_FRM_FROM_CEP3` float DEFAULT NULL, 
    `FWD_NO_FRM_FROM_ATP3` float DEFAULT NULL, 
    `FWD_NO_FRM_FROM_MGW3` float DEFAULT NULL, 
    `BAD_FRM3` float DEFAULT NULL, 
    `BS_REL3` float DEFAULT NULL, 
    `MSC_REL3` float DEFAULT NULL, 
    `MOB_REL3` float DEFAULT NULL, 
    `ANS` float DEFAULT NULL, 
    `REV_NO_FRM_FROM_CEP4` float DEFAULT NULL, 
    `FWD_NO_FRM_FROM_ATP4` float DEFAULT NULL, 
    `FWD_NO_FRM_FROM_MGW4` float DEFAULT NULL, 
    `BAD_FRM4` float DEFAULT NULL, 
    `BS_REL4` float DEFAULT NULL, 
    `MSC_REL4` float DEFAULT NULL, 
    `MOB_REL4` float DEFAULT NULL, 
    `AVG_ANS` float DEFAULT NULL, 
    `AVG_CPL` float DEFAULT NULL, 
    `AVG_DRP` float DEFAULT NULL, 
    `AVG_TRF` float DEFAULT NULL, 
    `AVG_HLD` float DEFAULT NULL, 
    `AVG_DLY` float DEFAULT NULL, 
    `LINK_UNA` float DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `BSM` (`BSM`), 
    KEY `ATT` (`ATT`), 
    KEY `Date` (`Date`), 
    KEY `Hour` (`Hour`) 
) ENGINE=InnoDB AUTO_INCREMENT=349625 DEFAULT CHARSET=utf8 
1 row in set (0.00 sec) 

mysql> 

回答

1

您正在尋找這樣的事情?

SELECT BSM, SUM(t.ATT) - SUM(t.RE_ORG) 
FROM (SELECT BSM, `DATE`, `HOUR`, ATT, RE_ORG FROM t1 union all 
     SELECT BSM, `DATE`, `HOUR`, ATT, RE_ORG FROM t2 union all 
     SELECT BSM, `DATE`, `HOUR`, ATT, RE_ORG FROM t3 union all 
     SELECT BSM, `DATE`, `HOUR`, ATT, RE_ORG FROM t4 
    ) t 
GROUP BY BSM; 
+0

是......完美!但我也需要每個BSM或每個日期/小時...像小時= '15:15:00' – Siva

+1

@Siva。 。 。您可以使用相同的子查詢,並根據您需要聚合的字段進行分組。 –