SQL 查询以获取基于不同条件的计数

SQL query to get count based differnt condition

table 列的描述 -

类型:VARCHAR

状态:VARCHAR

ORDER_DATE : 带时区的时间戳

请找到以下 table 结构和所需的输出。

在要求的结果中-

0TO30DAYS:前 30 天的类型计数

30TO60DAYS:过去 31 到 60 天的类型计数

60TO90DAYS:61 到 90 天的类型计数

请注意,我使用的 Oracle DB 无法根据不同的日期范围创建三个不同的计数列。请告诉我如何在 ORACLE 中创建相同的 SQL。

count 忽略 null,因此您可以 count 符合您逻辑的 case 表达式:

SELECT   type,
         COUNT(CASE WHEN day_diff BETWEEN 0 AND 31 THEN 1 ELSE NULL END) 
           AS "0TO30DAYS",
         COUNT(CASE WHEN day_diff BETWEEN 31 AND 61 THEN 1 ELSE NULL END) 
           AS "30TO60DAYS",
         COUNT(CASE WHEN day_diff BETWEEN 61 AND 91 THEN 1 ELSE NULL END) 
           AS "60TO90DAYS"
FROM     (SELECT type, CAST (order_date AS DATE) - SYSDATE AS day_diff
          FROM   my_table)
GROUP BY type
SELECT TYPE,
       CASE
         WHEN order_date >= (SYSDATE - 30) AND order_date < SYSDATE THEN
          COUNT(TYPE)
       END AS count30,
       CASE
         WHEN order_date >= (SYSDATE - 60) AND order_date < (SYSDATE - 30) THEN
          COUNT(TYPE)
       END AS count60,
       CASE
         WHEN order_date >= (SYSDATE - 90) AND order_date < (SYSDATE - 60) THEN
          COUNT(TYPE)
       END AS count90
  FROM TABLE
 GROUP BY TYPE, order_date