按月份统计数据总量:PostgreSQL查询可行但Laravel实现失败求助
问题解决:Laravel中实现PostgreSQL按月统计数据总量
错误原因
你写的Laravel代码里,groupBy('created_at')和orderBy('created_at')是错误的——原生SQL是按提取出的year和month分组排序,而不是原始的created_at字段。这样会导致分组逻辑完全不符合预期,自然无法得到正确结果。
正确的Laravel实现代码
把分组和排序的字段改成你在DB::raw里定义的别名year和month即可:
return DB::table('project_areas') ->select(DB::raw(" extract(year from created_at) as year, TO_CHAR(TO_TIMESTAMP(extract(month from created_at)::text, 'MM'), 'Month') as month, COUNT(id) AS count ")) ->groupBy('year', 'month') ->orderBy('year', 'month') ->get();
补充说明
如果开启了Laravel的严格模式(config/database.php中strict设为true),PostgreSQL可能要求分组字段必须和SELECT中的非聚合字段对应,这里用别名year和month分组是完全符合要求的,不会有问题。
内容的提问来源于stack exchange,提问作者Zenis
相关产品推荐
相关产品推荐

