我有这个示例表结构和记录:
-- ------------------ -- 驱动表结构 -- ------------------ 如果存在“驱动程序”,则删除表; 创建表`驱动程序`( `id` int(11) NOT NULL AUTO_INCREMENT, `fullname` varchar(100) 整理 utf8_unicode_ci NOT NULL, 主键(`id`) ) 引擎=InnoDB AUTO_INCREMENT=4 默认字符集=utf8 COLLATE=utf8_unicode_ci; -- ------------------ --taxi的表结构 -- ------------------ 如果存在 `taxi` 则删除表; 创建表`taxi`( `id` int(11) NOT NULL AUTO_INCREMENT, `unit` varchar(5) NOT NULL, 主键(`id`) ) 引擎=InnoDB AUTO_INCREMENT=4 默认字符集=latin1; -- ------------------ -- 债务表结构 -- ------------------ 如果存在“债务”,则删除表; 创建表`债务`( `id` bigint(20) NOT NULL AUTO_INCREMENT, `data` float(10,2) NOT NULL DEFAULT '0.00', `driver` bigint(20) NOT NULL, `dateadded` 日期时间不为空, 主键(`id`) ) 引擎=InnoDB AUTO_INCREMENT=22 默认字符集=latin1; -- ------------------ -- 调度表结构 -- ------------------ 如果存在`dispatch`,则删除表; 创建表`调度`( `id` int(11) NOT NULL AUTO_INCREMENT, `driver` int(11) NOT NULL, `taxi` int(11) NOT NULL, `dispatchdate` 日期 DEFAULT NULL, `率`浮动默认'0', 主键(`id`) ) 引擎=InnoDB AUTO_INCREMENT=1790 默认字符集=latin1; -- ------------------ -- 还款表结构 -- ------------------ 如果存在 `rpayment`,则删除表; 创建表`rpayment`( `id` bigint(20) NOT NULL AUTO_INCREMENT, `dateadded` 日期时间默认为 NULL, 主键(`id`) ) 引擎=InnoDB AUTO_INCREMENT=88 默认字符集=latin1; -- ------------------ -- rpayment_detail 的表结构 -- ------------------ 删除表如果存在`rpayment_detail`; 创建表`rpayment_detail`( `id` bigint(20) NOT NULL AUTO_INCREMENT, `rpayment` bigint(20) 非空, `dispatch` bigint(20) NOT NULL, `金额`浮动默认'0', 主键(`id`) ) 引擎=InnoDB AUTO_INCREMENT=56 默认字符集=latin1; -- ------------------ - 记录 -- ------------------ 插入“驱动程序”值('1','DRIVER1'); 插入“驱动程序”值('2','DRIVER2'); 插入“驱动程序”值('3','DRIVER3'); 插入“出租车”值('1','UNIT1'); 插入“出租车”值('2','UNIT2'); 插入“出租车”值('3','UNIT3'); 插入“债务”值('1','100.00','1','2012-04-01 16:07:15'); 插入“债务”值('2','200.00','1','2012-04-01 16:25:56'); 插入“债务”值('3','300.00','3','2012-04-01 16:34:42'); 插入“债务”值('4','400.00','2','2012-04-02 00:11:10'); 插入“债务”值('5','200.00','1','2012-04-02 00:57:58'); 插入“债务”值(“6”、“500.00”、“3”、“2012-04-02 10:25:39”); 插入“债务”值('7','100.00','2','2012-04-02 11:15:25'); 插入“调度”值(“1”、“1”、“1”、“2012-04-01”、“1000”); 插入“调度”值(“2”、“2”、“2”、“2012-04-01”、“1000”); 插入“调度”值(“3”、“3”、“3”、“2012-04-01”、“1000”); 插入“调度”值(“4”、“1”、“1”、“2012-04-02”、“1000”); 插入“调度”值(“5”、“2”、“2”、“2012-04-02”、“1000”); 插入“调度”值(“6”、“3”、“3”、“2012-04-02”、“1000”); 插入“rpayment”值('1','2012-04-30 20:11:16'); 插入“rpayment”值('2','2012-05-03 03:25:31'); 插入“rpayment_detail”值(“1”、“1”、“1”、“1000”); 插入“rpayment_detail”值(“2”、“1”、“4”、“0”); 插入“rpayment_detail”值(“3”、“2”、“2”、“0”); 插入“rpayment_detail”值(“4”、“2”、“5”、“500”);
我想查看如下结果:
UNIT DRIVER RPAYMENT_TOTAL TOTAL_DEBTS -------------------------------------------------- 单元 1 驱动器 1 1000 500 单元 2 驱动器 2 500 500 单元 3 驱动器 3 0 800
我现在有这个...
SELECT taxi.unit, driver.fullname, SUM(rpayment_detail.amount) AS rpayment_total,
SUM(debts.`data`) AS total_debts
FROM driver
LEFT JOIN debts ON (driver.id = debts.driver)
LEFT JOIN dispatch ON (driver.id = dispatch.driver)
LEFT JOIN rpayment_detail ON (dispatch.id = rpayment_detail.dispatch)
LEFT JOIN rpayment ON (rpayment_detail.rpayment = rpayment.id)
LEFT JOIN taxi ON (dispatch.taxi = taxi.id)
GROUP BY driver.id
ORDER BY taxi.unit asc, driver.fullname asc
结果是……
UNIT DRIVER RPAYMENT_TOTAL TOTAL_DEBTS -------------------------------------------------- 单元 1 驱动器 1 3000 1000.00 单元 2 驱动器 2 1000 1000.00 UNIT3 驱动程序 3 空 1600.00