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

YII2 SQL:按li_order_id统计li_units_bought列的求和值

搞定按li_order_id分组统计li_units_bought求和的方法

嘿,我来帮你把这个分组求和的逻辑加到你的Yii查询里!其实很简单,只需要两步:添加求和计算、指定分组字段,具体操作如下:

1. 在SELECT中加入求和字段

首先,在你现有的select列表里,新增一个用SUM()函数计算li_units_bought总和的字段,给它起个清晰的别名,比如TotalUnitsBought,方便后续调用。

2. 添加分组规则

调用Query对象的groupBy()方法,传入li_order_id,让查询按照这个字段对数据进行分组聚合。

修改后的完整代码示例

$query = (new \yii\db\Query())
    ->select([
        'oid',
        'ord_tracking_no as `Tracking No`',
        'site_name as Region',
        'adv_name as Advertiser',
        'line_id as LineId',
        'li_name as LineName',
        'li_status as StatusCode',
        'prd_desc as Product',
        'li_version as Version',
        'date_format(lrh_updated_date,"%Y-%m-%d %H:%i") as `Submit Date`',
        'date_format(li_start_date,"%Y-%m-%d %H:%i") as `Start Date`',
        // 新增:统计每个li_order_id下的li_units_bought总和
        'SUM(li_units_bought) as TotalUnitsBought',
        // 你原来的其他date_format字段继续放在这里就行
    ])
    // 保留你原来的关联表逻辑,比如->join()、->where()这些都不用改
    // ->join(...)
    // ->where(...)
    // 新增:按li_order_id分组
    ->groupBy('li_order_id');

关键注意事项

  • 如果你用的MySQL开启了ONLY_FULL_GROUP_BY(这是默认配置),那SELECT里所有非聚合的字段必须出现在GROUP BY中,或者用聚合函数处理它们。举个例子,如果同一个li_order_id下的site_name都是唯一的,那可以把这些字段都加到groupBy里:
    ->groupBy(['li_order_id', 'oid', 'ord_tracking_no', 'site_name', 'adv_name', ...])
    
  • 如果某些字段在同一个li_order_id下有多个不同值,你得根据业务需求选合适的聚合方式,比如用MAX(li_name)取最大值,或者ANY_VALUE(prd_desc)取任意值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:46:34