首页 > 解决方案 > SQL 平均计数 postgresql

问题描述

我想找出每年(0-10 年前、10-20 年前、20 多年前)表列条目(例如预订)的平均数量是多少。我知道如何做平均部分,但我不知道如何对不同组年份的 AVG 进行分类。

我有这个代码

SELECT DATE_OF_RESERVATION,count(RESERVATIONID) AS RESERVATIONS
FROM RESERVATIONS
WHERE EXTRACT(YEAR FROM Current_Date) - DATE_OF_RESERVATION <= 10
GROUP BY DATE_OF_RESERVATION

这是仅一个类别(第一个)的代码。我想在同一个查询中对所有三个执行此操作,但我无法弄清楚。

标签: sqlpostgresqldateaverage

解决方案


您可以使用case表达式。例如:

SELECT (CASE WHEN EXTRACT(YEAR FROM Current_Date) - DATE_OF_RESERVATION < 10
             THEN '[0-10)'
             WHEN EXTRACT(YEAR FROM Current_Date) - DATE_OF_RESERVATION < 20
             THEN '[0-20)'
             WHEN EXTRACT(YEAR FROM Current_Date) - DATE_OF_RESERVATION < 30
             THEN '[0-30)'
             ELSE 'More'
        END) as grp,
       COUNT(*) AS RESERVATIONS
FROM RESERVATIONS
GROUP BY grp;

推荐阅读