質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • Oracle

    612questions

    Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

ORACLEにてgroupbyで集計をしたのですが、うまくいきません。

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 558
退会済みユーザー

退会済みユーザー

ORACLEのSQL集計について質問があります。
初めまして当方Oracleを学び始めた初心者なのですがデータ集計で行き止まっています。
下記の結果を出せるSQLを教えて下さりませんでしょうか?

下記の画像のようなテーブルが二つありましてそれらを結合したものがテーブルの下のものになります。

テーブル説明

これらのテーブルから最終的に
・購入日が2015/1/1~2015/1/31の期間
 の区分ごとの会員人数

・購入日が2015/1/1~2015/2/28の期間
 の区分ごとの会員人数

・購入日が2015/1/1~2015/4/30の期間
 の区分ごとの会員人数

を集計したいのですがうまくいきません。

先にどのような結果が欲しいかといいますと下記になります。

・購入日が2015/1/1~2015/1/31の期間のもの
 会員区分:会員数
 0: 0
  1: 0
  2: 1

・購入日が2015/1/1~2015/2/28の期間のもの
 の区分ごとの会員人数
  会員区分:会員数
 0: 0
  1: 1
  2: 1

・購入日が2015/1/1~2015/4/30の期間のもの
 の区分ごとの会員人数
  会員区分:会員数
 0: 1
  1: 1
  2: 1

自分ではどうしても会員IDが重複してしまい下記のようになってしまいます。
下記がSQlになります。
select 
 会員区分、count(*)
from
 会員テーブル A,
 レッスン詳細テーブル B
where
 A.会員ID = B.会員ID AND
 B.購入日 between to_date(20150101,'YYYYMMDD') and to_date(20150131,'YYYYMMDD')
group by
 A.会員区分
order by
 A.会員区分;

・購入日が2015/1/1~2015/1/31の期間のもの
  の区分ごとの会員人数
  会員区分:会員数
 0: 0
  1: 0
  2: 1

・購入日が2015/1/1~2015/2/28の期間のもの
 の区分ごとの会員人数
  会員区分:会員数
 0: 0
  1: 2
  2: 1

・購入日が2015/1/1~2015/4/30の期間のもの
 の区分ごとの会員人数
  会員区分:会員数
 0: 1
  1: 4
  2: 2

すいませんがSQLのおかしなところがあったら指摘していただけないでしょうか?
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2016/04/29 07:07

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

  • yodel

    2016/04/29 11:56

    会員テーブルの中身についてですが、 (1,0) (2,1) (3,2) の3レコードのみが入っている認識です。

    キャンセル

回答 3

+1

to_date() の第一引数は文字列にしないといけないのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

会員IDが重複してしまうのならば、取得結果を
会員IDでGroupByやDistinctした結果をカウントしてみてはどうでしょうか。

select  
 会員ID,会員区分,count(*) 
from 
 会員テーブル A, 
 レッスン詳細テーブル B 
where 
 A.会員ID = B.会員ID AND 
 B.購入日 between to_date('20150101','YYYYMMDD') and to_date('20150131','YYYYMMDD') 
group by 
 A.会員ID,A.会員区分
order by 
 A.会員区分;

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

会員テーブルひとつみて一意ではないし、正規化を理解されていないように思えます。
wiki リレーションの正規化
などでググって調べてください。
Oracleではマルチバイト文字をテーブル名や列名に使った時はSQLは
CREATE TABLE "会員テーブル" ("会員ID"  NUMBER....
などとダブルクォーティングしないと動作保証されません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/03 23:29

    ご指摘ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    テーブルデータを削除するSQLの構文について

    SQLの経験が浅いため、おかしな点がありましたらご容赦ください。 テーブルの中のデータ削除処理をバッチ実行したいのですが、そもそものSQLの構文がよくわかりません。 どなたがご教

  • 受付中

    MySQLのSelect文でよい方法があれば教えてください。

    前提・実現したいこと date name pay 2015/2/1 tarou 5,000 2015/2/2 zirou 8,000 2015/2/2 saburou

  • 解決済

    SQL

    最終残高を求めるSQLを作成したいです。 もっとスッキリさせるにはどのようにすればよいでしょうか。 SELECT CUSTOMERS.NAME AS 名前          ,C

  • 解決済

    SQL(オラクル)で下記のようなSELECTを実現したい

    [TB1] dt                   n1    n2  ymd 2015/10/01    10    20  20151001 2015/10/02    20

  • 解決済

    【javascriptの日付計算について】変数をセット

    ■質問 this.getで取得してきた日付から1日前、30日前を取得するには どうしたらよいのか? 現在のコード(取得できない)   var day01 = thi

  • 解決済

    mysql 完全一致及び部分一致検索について

    ある特定カラム(例:name)に対して、完全一致で検索し、該当レコードがない場合、部分一致検索を一回のSQLクエリで実行したいのですが、可能でしょうか。 ご教授いただけると幸いです

  • 解決済

    SQLite から ORACLE

    ORACLEのデータベースを使用することになり、 SQLiteでは実行できていたものを、 対応してORACLEで実行できるようにしたいです。 どのようにすればいいでしょう

  • 解決済

    phpで月ごとに画像の切り替えを行いたい

    非常に初歩的な質問で恐縮ですが、タイトルには月ごとと書きましたが、とりあえず11月用の画像を表示して11月が終わったら12月用の画像を表示したいと思っております。 実際に書い

同じタグがついた質問を見る

  • Oracle

    612questions

    Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。