PostgresSQL一条SQL分组统计(平均值、最大值、最大值对应的日期、最小值、最小值对应的日期、最新值、最新值对应的日期、最早(老)值、最早值对应的日期)
在PostgreSQL中,你可以使用AVG()
, MAX()
, MIN()
等聚合函数来计算平均值、最大值和最小值。如果需要获取最大值或最小值对应的日期,你可以使用DISTINCT ON
语法或者子查询来实现。
以下是一个示例SQL查询,它计算每个组的平均值、最大值、最大值对应的日期以及最小值:
SELECT
category_id,
AVG(value) AS average_value,
MAX(value) AS max_value,
(SELECT MAX(date) FROM my_table WHERE my_table.category_id = mt.category_id AND value = mt.max_value) AS max_date,
MIN(value) AS min_value,
(SELECT MIN(date) FROM my_table WHERE my_table.category_id = mt.category_id AND value = mt.min_value) AS min_date
FROM
my_table mt
GROUP BY
category_id;
在这个查询中,my_table
是包含数值和日期的表格,category_id
是用于分组的字段,value
是要统计的数值字段。
请注意,如果有多个数值相同的情况,DISTINCT ON
会返回这些数值对应的最小日期。如果你需要获取所有这些日期,你可能需要使用更复杂的查询或者在应用层处理这种情况。
评论已关闭