如何查询一年中的 GROUP BY Month
Posted
技术标签:
【中文标题】如何查询一年中的 GROUP BY Month【英文标题】:How to query GROUP BY Month in a Year 【发布时间】:2012-07-17 22:32:27 【问题描述】:我正在使用 Oracle SQL Developer。 我基本上有一个包含列的图片表:
[DATE_CREATED(日期),NUM_of_PICTURES(int)]
如果我选择 *,我会得到类似的输出:
01-May-12 12
02-May-12 15
03-May-12 09
...
...
01-Jun-12 20
...
etc.
我正在尝试将这些图片总和汇总为每月数字而不是每日数字。
我试过做类似的事情:
select Month(DATE_CREATED), sum(Num_of_Pictures))
from pictures_table
group by Month(DATE_CREATED);
这会输出错误:
ORA-00904: "MONTH": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 5 Column: 9
我的月份函数有错吗?
【问题讨论】:
【参考方案1】:我倾向于在输出中包含年份。一种方式:
select to_char(DATE_CREATED, 'YYYY-MM'), sum(Num_of_Pictures)
from pictures_table
group by to_char(DATE_CREATED, 'YYYY-MM')
order by 1
另一种方式(更标准的 SQL):
select extract(year from date_created) as yr, extract(month from date_created) as mon,
sum(Num_of_Pictures)
from pictures_table
group by extract(year from date_created), extract(month from date_created)
order by yr, mon;
记住 order by,因为您可能希望这些按顺序排列,并且无法保证在 group by 之后返回行的顺序。
【讨论】:
1 和 2 在 order by 中分别代表什么? 1 和 2 指的是被排序的列,第一和第二。你也可以说“yr, mon”。 另外,如果 date_created 上有索引,则第二个选项效果更好 哇! 1、2 等也可以用于 GROUP BY @Ajoy 。 . .我不这么认为,至少在 Oracle 中不是。【参考方案2】:对于甲骨文:
select EXTRACT(month from DATE_CREATED), sum(Num_of_Pictures)
from pictures_table
group by EXTRACT(month from DATE_CREATED);
【讨论】:
【参考方案3】:我在 MSSQL 中就是这样做的
获取每月数据:
SELECT YEAR(DATE_CREATED) [Year], MONTH(DATE_CREATED) [Month],
DATENAME(MONTH,DATE_CREATED) [Month Name], SUM(Num_of_Pictures) [Pictures Count]
FROM pictures_table
GROUP BY YEAR(DATE_CREATED), MONTH(DATE_CREATED),
DATENAME(MONTH, DATE_CREATED)
ORDER BY 1,2
使用 PIVOT 获取月度数据:
SELECT *
FROM (SELECT YEAR(DATE_CREATED) [Year],
DATENAME(MONTH, DATE_CREATED) [Month],
SUM(Num_of_Pictures) [Pictures Count]
FROM pictures_table
GROUP BY YEAR(DATE_CREATED),
DATENAME(MONTH, DATE_CREATED)) AS MontlySalesData
PIVOT( SUM([Pictures Count])
FOR Month IN ([January],[February],[March],[April],[May],
[June],[July],[August],[September],[October],[November],
[December])) AS MNamePivot
【讨论】:
【参考方案4】:对于 MS SQL,您可以这样做。
select CAST(DATEPART(MONTH, DateTyme) as VARCHAR) +'/'+
CAST(DATEPART(YEAR, DateTyme) as VARCHAR) as 'Date' from #temp
group by Name, CAST(DATEPART(MONTH, DateTyme) as VARCHAR) +'/'+
CAST(DATEPART(YEAR, DateTyme) as VARCHAR)
【讨论】:
【参考方案5】:你可以使用:
select FK_Items,Sum(PoiQuantity) Quantity from PurchaseOrderItems POI
left join PurchaseOrder PO ON po.ID_PurchaseOrder=poi.FK_PurchaseOrder
group by FK_Items,DATEPART(MONTH, TransDate)
【讨论】:
以上是关于如何查询一年中的 GROUP BY Month的主要内容,如果未能解决你的问题,请参考以下文章
Ecto查询在datetime字段上执行group_by MONTH并返回元组列表
Laravel 按日期分组,如 MySQL 查询 GROUP BY MONTH(fields) [关闭]
sqlAlchemy 按DateTime字段的年或月进行group_by查询