oracle按月份获取每个季度的数据
Get each quarter data based on month in oracle
我的 table :
Year Month Value1 Value2
2020 1 100 100
2020 2 100 100
2020 3 100 100
2020 4 100 100
2020 5 100 100
2020 6 100 100
2020 7 100 100
2020 8 100 100
2020 9 100 100
2020 10 100 100
2020 11 100 100
2020 12 100 100
我的输出应该是什么样子:
Year Quarter Value1 Value2
2020 Q1 300 300
2020 Q2 300 300
2020 Q3 300 300
2020 Q4 300 300
我尝试了什么:
select year,sum(value1),sum(value2),sum(value3)
from table
where month=1 or month=2 or month=3
group by year;
但我只得到第一季度...如何编写 sql 查询
提前致谢...!!!
这里使用条件聚合。我们可以先在 CTE 中生成季度列,然后按年和季度汇总以获得总和。
WITH cte AS (
SELECT
Year, Value1, Value2,
CASE WHEN Month BETWEEN 1 AND 3 THEN 'Q1'
WHEN Month BETWEEN 4 AND 6 THEN 'Q2'
WHEN Month BETWEEN 7 AND 9 THEN 'Q3'
ELSE 'Q4' END AS Quarter
FROM yourTable
)
SELECT
Year,
Quarter,
SUM(Value1) AS Value1,
SUM(Value2) AS Value2
FROM cte
GROUP BY
Year,
Quarter
ORDER BY
Year,
Quarter;
您可以通过将月份除以 3 并向上舍入来计算季度:
SELECT Year,
'Q' || CEIL( month / 3 ) AS Quarter,
SUM( Value1 ) AS Value1,
SUM( Value2 ) AS Value2
FROM table_name
GROUP BY
Year,
CEIL( month / 3 )
ORDER BY
Year,
Quarter;
其中,对于示例数据:
CREATE TABLE table_name ( Year, Month, Value1, Value2 ) AS
SELECT 2020, 1, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 2, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 3, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 4, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 5, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 6, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 7, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 8, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 9, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 10, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 11, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 12, 100, 100 FROM DUAL;
输出:
YEAR | QUARTER | VALUE1 | VALUE2
---: | :------ | -----: | -----:
2020 | Q1 | 300 | 300
2020 | Q2 | 300 | 300
2020 | Q3 | 300 | 300
2020 | Q4 | 300 | 300
db<>fiddle here
我的 table :
Year Month Value1 Value2
2020 1 100 100
2020 2 100 100
2020 3 100 100
2020 4 100 100
2020 5 100 100
2020 6 100 100
2020 7 100 100
2020 8 100 100
2020 9 100 100
2020 10 100 100
2020 11 100 100
2020 12 100 100
我的输出应该是什么样子:
Year Quarter Value1 Value2
2020 Q1 300 300
2020 Q2 300 300
2020 Q3 300 300
2020 Q4 300 300
我尝试了什么:
select year,sum(value1),sum(value2),sum(value3)
from table
where month=1 or month=2 or month=3
group by year;
但我只得到第一季度...如何编写 sql 查询
提前致谢...!!!
这里使用条件聚合。我们可以先在 CTE 中生成季度列,然后按年和季度汇总以获得总和。
WITH cte AS (
SELECT
Year, Value1, Value2,
CASE WHEN Month BETWEEN 1 AND 3 THEN 'Q1'
WHEN Month BETWEEN 4 AND 6 THEN 'Q2'
WHEN Month BETWEEN 7 AND 9 THEN 'Q3'
ELSE 'Q4' END AS Quarter
FROM yourTable
)
SELECT
Year,
Quarter,
SUM(Value1) AS Value1,
SUM(Value2) AS Value2
FROM cte
GROUP BY
Year,
Quarter
ORDER BY
Year,
Quarter;
您可以通过将月份除以 3 并向上舍入来计算季度:
SELECT Year,
'Q' || CEIL( month / 3 ) AS Quarter,
SUM( Value1 ) AS Value1,
SUM( Value2 ) AS Value2
FROM table_name
GROUP BY
Year,
CEIL( month / 3 )
ORDER BY
Year,
Quarter;
其中,对于示例数据:
CREATE TABLE table_name ( Year, Month, Value1, Value2 ) AS
SELECT 2020, 1, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 2, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 3, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 4, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 5, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 6, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 7, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 8, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 9, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 10, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 11, 100, 100 FROM DUAL UNION ALL
SELECT 2020, 12, 100, 100 FROM DUAL;
输出:
YEAR | QUARTER | VALUE1 | VALUE2 ---: | :------ | -----: | -----: 2020 | Q1 | 300 | 300 2020 | Q2 | 300 | 300 2020 | Q3 | 300 | 300 2020 | Q4 | 300 | 300
db<>fiddle here