Mysql 请说明如何修复“组函数的无效使用”

Mysql 请说明如何修复“组函数的无效使用”,mysql,Mysql,我尝试在SUM函数中使用嵌套的CASE语法,但从3天起就什么都不起作用了 当我检索所有求和和和嵌套条件时,代码工作得非常好 我解释: 表格合同:每个客户都有一份合同,其中有两个值:Prix_TTC物品的价格,Qac_cont客户每月必须消费的物品数量 表命令:每个客户订单物品的数量 所以我想做的是得到每个客户在实际月份的所有财务损失,并将所有这些金额相加 SELECT SUM(pertes) AS pertes_reelles FROM (SELECT c.I

我尝试在SUM函数中使用嵌套的CASE语法,但从3天起就什么都不起作用了

当我检索所有求和和和嵌套条件时,代码工作得非常好

我解释:

表格合同:每个客户都有一份合同,其中有两个值:Prix_TTC物品的价格,Qac_cont客户每月必须消费的物品数量 表命令:每个客户订单物品的数量 所以我想做的是得到每个客户在实际月份的所有财务损失,并将所有这些金额相加

SELECT 
    SUM(pertes) AS pertes_reelles
FROM
    (SELECT 
        c.ID_clt,
            SUM(CASE
                WHEN
                    ((co.Qac_cont - SUM(CASE
                        WHEN Quantite_cmd IS NULL THEN 0
                        ELSE Quantite_cmd
                    END)) * - 1) < 0
                THEN
                    ((co.Qac_cont - SUM(CASE
                        WHEN Quantite_cmd IS NULL THEN 0
                        ELSE Quantite_cmd
                    END)) * - 1)
                ELSE 0
            END) * co.Prix_TTC AS pertes
    FROM
        clients c
    LEFT JOIN contrat co ON co.clt_ID = c.ID_clt
    LEFT JOIN commande cmd ON cmd.clt_ID = c.ID_clt
        AND MONTH(DATE(cmd.date_livr_cmd)) = MONTH(DATE('2019-08-30 09:23:23'))
    WHERE
        c.Etat_clt <> 'D'
    GROUP BY c.ID_clt) AS liste

正如@BobJarvis所说,问题在于嵌套求和,所以我分解了嵌套处理,它可以工作,谢谢!新的请求:

SELECT SUM(CASE
                WHEN
                    perte < 0
                THEN
                    perte * - 1
                ELSE 0
            END) AS pertes_reelles
FROM
    (SELECT 
        c.ID_clt, co.Prix_TTC, ((co.Qac_cont - SUM(CASE
                        WHEN Quantite_cmd IS NULL THEN 0
                        ELSE Quantite_cmd
                    END)) * - 1) as ecart, co.Prix_TTC * ((co.Qac_cont - SUM(CASE
                        WHEN Quantite_cmd IS NULL THEN 0
                        ELSE Quantite_cmd
                    END)) * - 1) as perte
    FROM
        clients c
    LEFT JOIN contrat co ON co.clt_ID = c.ID_clt
    LEFT JOIN commande cmd ON cmd.clt_ID = c.ID_clt
        AND MONTH(DATE(cmd.date_livr_cmd)) = MONTH(DATE('".$today."'))
    WHERE
        c.Etat_clt <> 'D'
    GROUP BY c.ID_clt) AS liste

你能提供更多你想要获得的信息吗?也许一个样本数据能帮上忙。好吧,让我来编辑一下。我想问题是你用co.Prix_TTC乘以总和,所以破坏了聚合。尝试使用“仅限内部选择”进行测试,看看是否可以让它选择所需内容。@Adder和c.ID\u clt仅在“仅限内部选择所有”中起作用,但当我尝试使用实际请求而不使用“*co.Prix\u TTC”时,它不起作用。这些嵌套和调用在我看来是有问题的。