Yıl içinde GROUP BY Month sorgusu nasıl yapılır

Oracle SQL Developer kullanıyorum. Esasen sütunları tutan bir resim tablom var:

[DATE_CREATED(tarih), NUM_of_PICTURES(int)]

ve bir select * yaparsam, şuna benzer bir çıktı alırım:

01-May-12    12
02-May-12    15
03-May-12    09
...
...
01-Jun-12    20
...
etc.

Bu resim toplamlarını GÜNLÜK yerine AYLIK sayılar halinde toplamaya çalışıyorum.

Şöyle bir şey yapmayı denedim:

select Month(DATE_CREATED), sum(Num_of_Pictures))
from pictures_table
group by Month(DATE_CREATED);

Bu bir hata çıktısı verir:

ORA-00904: "MONTH": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 5 Column: 9

Ay fonksiyonunu yanlış mı anladım?

Çözüm

Ben olsam yılı da çıktıya dahil etme eğiliminde olurdum. Tek bir yol var:

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

Başka bir yol (daha standart 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;

Muhtemelen bunları sırayla istediğinizden ve bir group by'dan sonra satırların döndürülme sırası hakkında bir garanti olmadığından, order by'ı unutmayın.

Yorumlar (11)

Oracle için:

select EXTRACT(month from DATE_CREATED), sum(Num_of_Pictures)
from pictures_table
group by EXTRACT(month from DATE_CREATED);
Yorumlar (0)

MS SQL için bunu yapabilirsiniz.

    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) 
Yorumlar (0)