【问题标题】:How to query GROUP BY Month in a Year如何查询一年中的 GROUP BY Month
【发布时间】: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

我的月份函数有错吗?

【问题讨论】:

    标签: sql oracle


    【解决方案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)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-10-05
            • 2021-06-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多