2016-10-11 2 views
2

クラスのクエリを記述する必要があり、問題が少しあります。私は、2月に登録したすべての学生を引き上げるための質問が必要です。私は現在作業中のクエリを持っていますが、必要なものが出力されていません。ここで私はこれまで...Oracle SQLで1か月未満のデータを統合する

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 

は、これらすべての数字を追加することである持っているものですこのように、単一の「2月」行の下に...

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は必要ありません。

また、は決してには日付の列にLIKEを使用してください。 LIKEは文字列の引数を取るので、データベースのさまざまな設定(通常はほとんどの人が手がけていない)を使用して、日付の列を文字列に変換します。二重引用符が必要とされていないことを

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

注:あなたはこのように表現することができ、

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; 

または:ここ

は、代替です。

一般的に、「2月」は気にしません。ある年に2月を気にする人がいます。その場合は、クエリは最高のように書かれている:機能を回避することによって

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

これは登録された学生の数ではなく、記録の量を示します。 COUNT()の代わりにSUM()を使用する必要があります。 – walen

+0

@walen。 。 。私はそのコメントを全く理解していません。 OPの元のクエリは 'count()'を使用します。おそらく、「登録」には、1人の学生が1つの行に数えられます。 –

関連する問題