来自1个以上表的MySQL sum()

时间:2019-12-01 04:00:18

标签: mysql sql database sum multi-table

SELECT fee +
    sum(((hourEnd-hourStart)*4) as sumAct3 
    from reserve join activity
    on reserve.idactivity=activity.idactivity
    join customer
    on customer.idcustomer=reserve.idcustomer
    where activity.typeAct=1 and customer.idcustomer='S1')
    +
    sum(((hourEnd-hourStart)*2) as sumAct2
    from reserve join activity
    on reserve.idactivity=activity.idactivity
    join customer
    on customer.idcustomer=reserve.idcustomer
    where activity.typeAct=2 and customer.idcustomer='S1')
FROM customer 
WHERE idcustomer='S1';

好,所以每个sum()返回所需的值,我已经检查过了,但是在尝试将所有内容加在一起然后获得总值时遇到了问题。

基本上我必须这样做:

  • 初始费用(这是在“客户”表上定义的设置值)+活动1费用之和+活动2费用之和==值

但是我不知道如何使它工作,所以我得到了所有东西的总和,我尝试了一段时间,但总是得到“ SELECT在此位置无效”

1 个答案:

答案 0 :(得分:2)

通过将表相互JOIN并使用条件聚合来获得活动总和,您可以更容易地获得小时总和:

SELECT c.idcustomer, 
       SUM(CASE WHEN a.typeAct = 1 THEN hourEnd - hourStart ELSE 0 END) * 4 AS sumAct1,
       SUM(CASE WHEN a.typeAct = 2 THEN hourEnd - hourStart ELSE 0 END) * 2 AS sumAct2
FROM customer c
JOIN reserve r ON r.idcustomer = c.idcustomer
JOIN activity a ON a.idactivity = r.idactivity
WHERE a.typeAct IN (1, 2) AND c.idcustomer = 'S1'
GROUP BY c.idcustomer

然后使用此结果作为派生表进行最终添加:

SELECT c.idcustomer, c.fee + f.sumAct1 + f.sumAct2
FROM customer c
JOIN (
    SELECT c.idcustomer, 
           SUM(CASE WHEN a.typeAct = 1 THEN hourEnd - hourStart ELSE 0 END) * 4 AS sumAct1,
           SUM(CASE WHEN a.typeAct = 2 THEN hourEnd - hourStart ELSE 0 END) * 2 AS sumAct2
    FROM customer c
    JOIN reserve r ON r.idcustomer = c.idcustomer
    JOIN activity a ON a.idactivity = r.idactivity
    WHERE a.typeAct IN (1, 2) AND c.idcustomer = 'S1'
    GROUP BY c.idcustomer
) f ON f.idcustomer = c.idcustomer