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

Laravel 8中PostgreSQL用子查询结合GROUP BY获取分组行值并统计的方法

原SQL错误原因

你的SQL在仅按id_out_sta分组时,SELECT子句中未被聚合、也不属于分组字段的status_exec取值是随机的,不会自动匹配最大date_sta对应的状态值,因此无法得到正确结果。


方案1:窗口函数实现(主流数据库均支持,逻辑清晰)

WITH ranked_data AS (
    SELECT 
        id_out_sta,
        status_exec,
        -- 按id_out_sta分组,日期倒序排名,排名为1的就是每组最新的记录
        ROW_NUMBER() OVER (PARTITION BY id_out_sta ORDER BY date_sta DESC) AS rn
    FROM public.status_exe 
    JOIN public.order_out ON status_exe.id_out_sta = order_out.id_out
)
SELECT 
    status_exec,
    COUNT(*) AS COUNT
FROM ranked_data
WHERE rn = 1 -- 仅保留每个id_out_sta的最新记录
GROUP BY status_exec
ORDER BY status_exec;

方案2:子查询关联实现(兼容不支持窗口函数的低版本数据库)

SELECT 
    t.status_exec,
    COUNT(*) AS COUNT
FROM public.status_exe t
JOIN public.order_out o ON t.id_out_sta = o.id_out
-- 关联子查询获取每个id_out_sta的最大日期
JOIN (
    SELECT id_out_sta, MAX(date_sta) AS max_date
    FROM public.status_exe
    GROUP BY id_out_sta
) t_max ON t.id_out_sta = t_max.id_out_sta AND t.date_sta = t_max.max_date
GROUP BY t.status_exec
ORDER BY t.status_exec;

两种方案执行后都能得到你期望的统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:24:04