2016-10-11 20 views
2

我需要爲一個類編寫一個查詢,並且我遇到了一些問題。我需要查詢來提請所有在2月份註冊的學生。我現在有一個工作查詢,但它不會輸出我需要的。這裏是我迄今爲止...在Oracle SQL中的一個月內合併數據

SELECT COUNT(*) "February_Registration", enroll_date 
FROM enrollment 
WHERE enroll_date LIKE '%FEB%' 
GROUP BY enroll_date ; 

這是我從該查詢得到的輸出...

February_registration | enroll_date 
................................... 
14 | 02-FEB-07 
36 | 01-FEB-07 
22 | 10-FEB-07 
26 | 16-FEB-07 
20 | 07-FEB-07 
24 | 11-FEB-07 

我需要做的是添加了所有這些數字下單「二月」行像這樣...

February_Registration | enroll_date 
142 | February 

我缺少什麼,什麼做我需要做的,使其工作。請在發佈代碼之前解釋一下自己,我想實際學習這些材料,如果我必須坐在那裏找出我以前從未見過的代碼,那麼要做到這一點非常困難。這沒什麼幫助,我想要一個很好的解釋以及任何代碼建議。

在此先感謝。

回答

0
SELECT SUM(February_Registration) AS February_Registration, 
     CASE WHEN EXTRACT(MONTH FROM enroll_date) = '02' 
      THEN 'February' END AS enroll_date 
    FROM enrollment 
GROUP BY enroll_date; 
+0

這項工作?我認爲'EXTRACT'函數會返回一個數字而不是一個字符串。 – CGritton

+0

將'FEB'更改爲02 – Teja

1

你不需要GROUP BY,如果你只是想要的總數。

而且,從不在日期列上使用LIKELIKE需要字符串參數,所以日期列轉換爲字符串,使用數據庫中的各種設置(大多數人通常不會擺弄)。

這裏是一個另類:

SELECT COUNT(*) as February_Registration, 
     'February' as enroll_date -- I'm not exactly sure why this is needed 
FROM enrollment 
WHERE EXTRACT(month FROM enroll_date) = 2; 

或者,你可以表達這種爲:

WHERE TO_CHAR(enroll_date, 'MON') = 'FEB' 

注意,不需要雙引號。

現在,一般來說,人們不關心「二月」。一個人在乎某一年的二月。如果是這樣的情況下,查詢最好寫成:

SELECT COUNT(*) as February_Registration 
FROM enrollment 
WHERE enroll_date >= DATE '2016-02-01' AND 
     enroll_date < DATE '2016-03-01'; 

通過避免函數調用enroll_date,你給優化器更多的機會來調整查詢。

+0

他的問題在表格中明確提到2月份... – Teja

+0

這會給您記錄的數量,而不是註冊的學生數量。你應該使用SUM()而不是COUNT()。 – walen

+0

@walen。 。 。我根本不理解評論。 OP的原始查詢使用'count()'。據推測,「招生」每個學生有一行要計算在內。 –