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
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