在sql select查询后,我得到的数组是写下来的那个,我希望在这个数组中添加一个sum(values)AS Total_Values列和sum(values) - 值AS Diff_Values列,I尝试了多种方式,但我没有做对的事
我当前查询的结果如下:
Car_Number Start_time Code_nr Values Total_Values
BH-07-EWR 08:59:00 C00425 7000 44400
BH-07-EWR 10:29:00 C00149 8500 44400
BH-07-EWR 14:27:00 C01075 9200 44400
BH-07-EWR 15:07:00 C00305 9800 44400
BH-07-EWR 16:08:00 C02572 9900 44400
我希望如此:
Car_Number Start_time Code_nr Values Total_Values Diff_Values
BH-07-EWR 08:59:00 C00425 7000 44400 44400
BH-07-EWR 10:29:00 C00149 8500 44400 37400
BH-07-EWR 14:27:00 C01075 9200 44400 28900
BH-07-EWR 15:07:00 C00305 9800 44400 19700
BH-07-EWR 16:08:00 C02572 9900 44400 9900
我怎样才能做到这一点?事情可能看起来很简单,但经历了一些复杂的事情。感谢
更新
示例SQL:
SELECT *, SUM(MINUTE(rest_time)) AS Times FROM routes as routes
LEFT JOIN sales ON (routes.departure_poi_code = sales.client_code
AND routes.departure_date = sales.date)
WHERE (routes.departure_poi_code LIKE 'C0%'
OR routes.departure_poi_code LIKE 'MP%')
AND routes.car_no = 'BH-07-EWR'
AND routes.departure_date = '2011-10-14'
GROUP BY routes.departure_address, reports.routes.departure_poi_code, reports.routes.car_no, reports.routes.departure_date
ORDER BY routes.car_no LIMIT 500000 ;
当然查询会返回更多显示的列。
答案 0 :(得分:3)
假设您的表名是TBL。
SELECT TBL.*, Total_Values, @R:=IF(@R=0, Total_Values, @R-TBL.`Values`) AS Diff_Values
FROM TBL, ( SELECT @R:=0, SUM(`Values`) AS Total_Values FROM TBL ) x;
答案 1 :(得分:0)
这确实很棘手。我无法弄清楚如何在查询中执行此操作,但也许存储过程可能是一种方式。
假设查询中的以下结果集存储在名为TMPTBL
的中间表中,其中每一行都由唯一的ID标识。所以TMPTBL
将如下所示:
id Car_Number Start_time Code_nr Values
1 BH-07-EWR 08:59:00 C00425 7000
2 BH-07-EWR 10:29:00 C00149 8500
3 BH-07-EWR 14:27:00 C01075 9200
4 BH-07-EWR 15:07:00 C00305 9800
5 BH-07-EWR 16:08:00 C02572 9900
请注意,您不需要计算将作为存储过程的一部分执行的Total_Values
。
现在创建一个程序如下:
DELIMITER ;;
CREATE PROCEDURE spCompute()
BEGIN
DECLARE idn INT;
DECLARE vals INT;
DECLARE totVals INT DEFAULT 0;
DECLARE noData INT DEFAULT FALSE;
DECLARE csrData CURSOR FOR SELECT `id`, `Values` FROM `TMPTBL` ORDER BY `id` DESC;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET noData = TRUE;
OPEN csrData;
startLoop: LOOP
FETCH csrData INTO idn, vals;
IF noData THEN
LEAVE startLoop;
END IF;
SET totVals = totVals + vals;
UPDATE `TMPTBL` SET `Diff_Values` = totVals WHERE `id` = idn;
END LOOP;
UPDATE `TMPTBL` SET `Total_Values` = totVals;
CLOSE csrData;
END;;
DELIMITER ;
这个想法是,不是做差异,而是添加值。现在,如果在TMPTBL上运行SELECT查询,您将看到Diff_Values和Total_Values。请注意,我没有测试过程,但我认为它应该有效。
很少有事情需要注意:
希望它有所帮助!