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

PostgreSQL中如何基于其他列的值聚合指定列

正确的PostgreSQL查询方案:按date和status聚合统计水果数量

原查询的问题在于GROUP BY子句包含了fruit和numberOfFruits,这会让每一行单独成为一个分组,导致聚合函数计算的结果和当前行的numberOfFruits完全一致,根本没实现按date和status聚合的需求。

要实现需求,应该使用窗口函数,在保留原表所有数据的同时,为每一行添加上对应date+status分组的统计值,正确的SQL如下:

SELECT 
    date, 
    fruit, 
    status,
    numberOfFruits,
    AVG(numberOfFruits) OVER (PARTITION BY date, status) AS AvgNumOfFruits,
    MIN(numberOfFruits) OVER (PARTITION BY date, status) AS MinNumOfFruits,
    MAX(numberOfFruits) OVER (PARTITION BY date, status) AS MaxNumOfFruits
FROM fruitdata
ORDER BY fruit, date;

逻辑说明

  • 窗口函数通过PARTITION BY date, status指定分组规则:将相同日期、相同状态的行归为一组
  • AVG()/MIN()/MAX()分别计算每组内numberOfFruits的平均值、最小值、最大值,将结果附加到组内每一行
  • 最后按fruit和date排序,符合需求

期望输出结果

datefruitstatusnumberOfFruitsAvgNumOfFruitsMinNumOfFruitsMaxNumOfFruits
2022-01appleripe36.5310
2022-02appleripe3333
2022-01bananamature5759
2022-02bananamature3537
2022-01grapesmature9759
2022-02grapesmature7537
2022-01pearripe106.5310
2022-02pearripe3333

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:48:06