使用SQL 统计表最大值,最小值,平均值,中位数值

打印 上一主题 下一主题

主题 532|帖子 532|积分 1596

问:有一个postgres数据表,表中有update_time, create_time关于时间戳的字段,选择某个时间段,计算出update_time减去create_time的值做为耗时时间的字段duration_time,统计出在这段时间内耗时时间的平均值,中位数值,最大值,和最小值,请问如何通过sql语句实现此统计?


  • 答:您好!您可以使用以下SQL语句来实现您所描述的统计:
    1. SELECT AVG(duration_time) AS avg_duration,
    2.        PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY duration_time) AS median_duration,
    3.        MAX(duration_time) AS max_duration,
    4.        MIN(duration_time) AS min_duration
    5. FROM (
    6.     SELECT update_time - create_time AS duration_time
    7.     FROM your_table_name
    8.     WHERE update_time BETWEEN start_time AND end_time
    9. ) subquery;
    复制代码
    请注意,您需要将 your_table_name 替换为您的表名,start_time 和 end_time 替换为您想要查询的时间段。希望这对您有帮助!
表中还有另一个字段处置策略字段为handle_strategy, 按照handle_strategy分组 统计,如何改写上面的查询?


  • 您好!如果您想按照 handle_strategy 字段分组统计,可以使用以下SQL语句:
    1. SELECT handle_strategy,
    2.        AVG(duration_time) AS avg_duration,
    3.        PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY duration_time) AS median_duration,
    4.        MAX(duration_time) AS max_duration,
    5.        MIN(duration_time) AS min_duration
    6. FROM (
    7.     SELECT handle_strategy, update_time - create_time AS duration_time
    8.     FROM your_table_name
    9.     WHERE update_time BETWEEN start_time AND end_time
    10. ) subquery
    11. GROUP BY handle_strategy;
    复制代码
    请注意,您需要将 your_table_name 替换为您的表名,start_time 和 end_time 替换为您想要查询的时间段。希望这对您有帮助!
平均数统计保留到整数位,不需要小数; 上面PERCENTILE_CONT(0.5) WITHIN GROUP语句表示的是什么意思?


  • 您好!如果您想将平均数统计保留到整数位,可以使用 ROUND 函数来实现。以下是修改后的SQL语句:
    1. SELECT handle_strategy,
    2.        ROUND(AVG(duration_time)) AS avg_duration,
    3.        PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY duration_time) AS median_duration,
    4.        MAX(duration_time) AS max_duration,
    5.        MIN(duration_time) AS min_duration
    6. FROM (
    7.     SELECT handle_strategy, update_time - create_time AS duration_time
    8.     FROM your_table_name
    9.     WHERE update_time BETWEEN start_time AND end_time
    10. ) subquery
    11. GROUP BY handle_strategy;
    复制代码
    至于您问的 PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY duration_time) 语句,它表示计算 duration_time 字段的中位数。PERCENTILE_CONT 是一个聚合函数,它用于计算连续分布的给定百分位数。在这里,我们使用 0.5 作为参数,表示我们想要计算中位数(即第50百分位数)。WITHIN GROUP (ORDER BY duration_time) 子句用于指定对哪个字段进行排序以计算百分位数。
    希望这些信息对您有帮助!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

半亩花草

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表