You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP/MySQL 如何使用SUM聚合计算结果关联查询另一张表

问题原因

MySQL的语句执行顺序为:FROM/JOIN → WHERE → GROUP BY → 聚合计算 → HAVING → SELECT → ORDER BY
你定义的temphf是聚合计算后生成的别名,在执行JOIN的阶段还没有生成,所以会报未知列错误。

解决方案1:使用派生表(子查询,兼容所有MySQL版本)

先通过子查询提前计算tempimport的聚合结果,再和hf表关联,示例代码如下:

$stateKdnr = $pdo->prepare("
    SELECT t.*, hf.* 
    FROM (
        SELECT 
            *, 
            COUNT(csv_kd_nr) AS cnt, 
            SUM(csv_betrag) as temphf 
        FROM tempimport 
        WHERE csv_zeilenstatus != 'done' 
        GROUP BY csv_kd_nr, csv_name, csv_ort, csv_vorname
    ) AS t
    INNER JOIN hf ON t.temphf BETWEEN hf.von_hf AND hf.bis_hf
");

解决方案2:使用CTE(仅支持MySQL 8.0+,可读性更好)

$stateKdnr = $pdo->prepare("
    WITH temp_agg AS (
        SELECT 
            *, 
            COUNT(csv_kd_nr) AS cnt, 
            SUM(csv_betrag) as temphf 
        FROM tempimport 
        WHERE csv_zeilenstatus != 'done' 
        GROUP BY csv_kd_nr, csv_name, csv_ort, csv_vorname
    )
    SELECT temp_agg.*, hf.*
    FROM temp_agg
    INNER JOIN hf ON temp_agg.temphf BETWEEN hf.von_hf AND hf.bis_hf
");

注意事项

你原有写法中的关联条件von_hf > temphf AND bis_hf < temphf逻辑错误,无法匹配到任何数据。如果需要实现「temphf的值介于von_hf和bis_hf之间」的规则,请使用上文示例中的BETWEEN语法,若不需要包含边界值,可改为temp_agg.temphf > hf.von_hf AND temp_agg.temphf < hf.bis_hf。

内容的提问来源于stack exchange,提问作者Pizzucu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:24:05