• 締切済み

SQL文の問題がよくわかりません。

データが多すぎるので書き込めなくてすみません。 SQL文がよくわかりません。主にOracleでやってます。 表の名前 hyou1-社員のマスタ 社員コード、名前、職種、給与等級 hyou2-販売のマスタ 顧客コード、商品コード、販売数 「」は抽出例です。 (1)hyou1において給与等級が多い人の社員コードを検出 職種順に表示をする。「社員コード、職種」 (2)hyou1において給与等級平均より給与等級が多い人の職種を検索「職種」 (3)hyou1において給与等級平均より給与等級が多い人の職種毎の人数および平均給与等級の検索「職種、人数、平均給与等級」 (4)hyou1において給与等級が1または3または5である人を検索「全列」 (5)hyou2において、顧客コードが'1992’の人が購入したデータを検索「顧客コード、商品コード」 (6)hyou2において、顧客コードが’1992’である人が購入したデータを検索「顧客コード、氏名、商品コード」 (7)hyou2において、顧客名(氏名)’山田太郎’さんが購入したデータを検索「顧客コード、氏名、商品コード」 (8)hyou2において顧客コードが’1992’である人が購入した商品と同じ商品を購入した人を検索{全列」 (9)hyou2において販売数の平均「販売数平均」 (10)hyou2において販売数の平均以下の購入者を検索「全列」

みんなの回答

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

学校の宿題ですか? ここは学校の宿題の、それもまるっぽ答えを求めるところではありません。 そして、(1)の「給与等級が多い人」はsql文にはなりません。 写すんならきっちり写しなさい。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 1回のSQL文で書く方法を教えてください。

    うまく説明できるかわかりませんが、よろしくお願いします。 送り状ファイル   登録番号   送り主コード   送り先コード 顧客マスタ   コード   氏名 というテーブルがあり、 [登録番号]から送り状ファイルを検索し、 該当するデータの[送り主コード]と[送り先コード]から顧客マスタを検索し、 顧客マスタの[氏名]を取得したいのですが、 どのようなSQL文を書けばよいのでしょうか? 検索結果が   登録番号    ← 送り状ファイル   送り主コード  ← 送り状ファイル・顧客マスタ   送り主氏名   ← 顧客マスタ   送り先コード  ← 送り状ファイル・顧客マスタ   送り主氏名   ← 顧客マスタ としたいのです。 1回のSQL文で可能でしょうか?教えてください。

  • SQL文で再起的なwhere句の書き方

    SQLで再起的に検索できるようなwhere句の書き方がわかりません。 例えば... ┌───────┐ │部署     │ ┝━━━━━━━┥ │部署_cd  │≪┐<┐ │部署名    │ │ │ │親部署_cd │<┘ │ └───────┘   │ ┌───────┐   │ │社員     │   │ ┝━━━━━━━┥   │ │氏名     │   │ │所属部署_cd│≪──┘ └───────┘ というテーブルがあったとして、 ある部署以下の「のべ社員数」を求めるにはどのような式を書けばよいのでしょうか。。

  • SQLで質問があります。

    すみません。初めて質問させて頂きます。 以下のような条件のSQL生成は可能でしょうか。 可能な場合どのようなSQLになるかご教授頂けないでしょうか。 <条件> テーブルA,B,Cで一致する社員コード AND テーブルAの年月日がnull AND テーブルBの区分コードが"01"以外 AND テーブルCの部門コードでテーブルDを検索し 取得した会社コードが"00001" <取得したい項目> テーブルA.社員コード テーブルA.社員氏名 テーブルC.区分コード <テーブルA> 社員コード* 会社コード 年月日 社員氏名 <テーブルB> 社員コード* 会社コード 区分コード <テーブルC> 社員コード* 会社コード 部門コード <テーブルD> 会社コード* 部門コード* *は主キー よろしくお願い致します。

  • エクセルで2つの表を見比べる

    上手く表現出来ずに変なタイトルになってしまいました… sheet1に顧客全員の名簿があるとします B列には顧客の氏名、C列には会員のランク(3種類のランク分けがしてあります) という名簿です。 sheet2にはある商品を購入した購入者名簿があります。 D列に顧客の氏名、その他の列には住所などが入力してあります。 (順番は購入日順なので、バラバラです。) sheet2の購入者名簿に名前のある顧客の氏名を sheet1の顧客全員の名簿から探し、C列の会員ランクを 『上得意』と変えたいのですが関数などを使って 簡単に出来る方法ってありますか? 会員数が6000名、商品購入者が200名くらいと 数が多いので1件1件検索すると時間がかかります… VLOOKUP関数なんかで出来たかなと思ったんですけど 勉強したのがだいぶ前なのですっかり忘れてしまいました。 詳しい方、ぜひいい方法を教えてください。

  • ACCESSで複数あるコードを分類して1レコードで集計したい

    いつもお世話になっています。 ACCESS初心者です。ACCESS2000を使用しています。 下記のような表をACCESSで、集計したいと思っています。 顧客ID 商品コード 商品購入日 1    123     20050223 1    124     20050403 2    123     20050302 3    124     20041223 3    133     20050131 これを、1顧客1レコードとして集計したいのです。 それぞれの商品フィールドをつくり、各購入数と そのうち一番最近購入した商品コードと、日付を 顧客別に一覧表示したいのです。 顧客ID 商品123+124 数 123+124購入日 商品133 数 133購入日 1    124      2   20050403     2    123      1   20050302 3    124      1   20041223    133   1   20050131 ↑こんな感じです。 これを最終的には、csvで書き出したいと思っています。 色々試してみましたが、思ったような結果がでません。 ご教授よろしくお願いいたしますm(__)m

  • 至急でSQLについて教えていただきたいです。

    【至急で知りたいです】アクセス SQL文について アクセス・クエリについて初心者であり、恐縮ではございます。 以下を求めたい時にどのようなSQLで注文をすればよいかご指導いただきたいです。 内容: ・注文テーブル: 列は購入日・顧客コード・顧客種別・年代・レジコード・商品NO・商品名・購入数・購入金額 2011/05/01 11111 通常 30代 12345 9999 お菓子 1 500 2011/05/01 11111 通常 30代 12345 9998 ご飯 2 1000 2011/05/01 11112 新規 10代 12346 9999 お菓子 1 500 ・期間限定割引テーブル 列は商品NO・開始日・終了日 9999 2011/04/10 2011/04/20 9998 2011/05/01 2011/05/10 抽出したい内容 (1)注文テーブルにある購入日で日付を指定の上、(betweenで2010/06/01-2011/05/31までなど) 商品NOを特定の1品目、もしくは複数選択をした上で、その商品に対する期間内の購入数・購入金額を求めたい。 ただし、"期間限定割引テーブル"に差し掛かる期間のみ、別の列で分けて表示させたい。 (つまり割引期間と通常期間を列で分けることで売上の差を見極めたいのです。) 例えば、商品NOを9998で指定した場合の希望内容 購入日 商品No 商品名 通常購入数 割引購入数 通常購入金額 割引購入金額 2011/05/01 9998 ご飯 0 100 0 50000 2011/05/11 9998 ご飯 30 0 24000 0 (2)注文テーブルにある購入日で日付を指定の上、(上記(1)と同様)商品NOを特定の1品目、もしくは複数選択をした上で、 年代別で顧客種別ごとの客数を知りたい場合 例えば、商品NOを9998で指定した場合の希望内容 商品NO年代 リピート 初めて 新規 フリー 9998 10代 2000 500 100 30 9998 20代 3000 1000 200 50 9998 30代 5000 1050 400 100 ← 客数です。 ※上の客数は顧客種別かレジコードをカウントすれば良いと思いますが、一人のお客様が一回の会計で5品目買ったらレコードは5つになるため、重複を防ぐ必要があります。(対象の品物を何回購入したことがあるか表示したいので、、) また、"顧客種別"は通常・新規・フリーの三種類の言葉で分類分けされて登録されてますが、通常のみ、設定した抽出対象期間前にも1回でも購入があれば"リピート"としてカウント、過去に購入なく抽出対象期間内で初めて購入があった場合は"初めて"にカウントしたいです。 複雑かもしれませんが、どなたかご指導をよろしくお願いします

  • Accessのクエリについて教えてください。

    クエリで顧客名を入力するとその人のデータが表示されるようにしたいのですが、購入履歴がない人は表示されません。購入履歴のない人も全て表示させる方法を教えていただけますか? ちなみにSQLはこういう感じです。よろしくお願いします。 SELECT 顧客マスター.顧客ID, 顧客マスター.氏名, Sum(販売.販売額) AS 販売合計 FROM 顧客マスター INNER JOIN 販売 ON 顧客マスター.顧客ID = 販売.顧客ID GROUP BY 顧客マスター.顧客ID, 顧客マスター.氏名 HAVING (((顧客マスター.氏名) Like [顧客名字を入力してください] & "*"));

  • 統計学についての問題の答えを教えて頂きたいのですが

    ビジネス統計学という書籍の問題なのですが、回答が用意されておらず答えが合っているか、わかりません。回答がわかる方がいれば教えてください。問題は以下です。 別々の国に居住する4人の顧客に商品を販売する会社がある。 販売価格は現地通貨で固定されており、配送時の為替レートで現地通貨をドルに交換する予定になっている。 通常、為替レートには不確実性があり、この会社の販売部門は配送予定日の期待為替レート水準と標準偏差を推定している。 この推定値は表に示されている。為替レートは正規分布に従い、互いに独立であると仮定する。 顧客1 商品の数12個 売値₤57810 レート 平均$1.41/₤  標準偏差$0.041/₤ 顧客2 商品の数8個 売値\8640540 レート 平均$0.00904/\ 標準偏差$0.00045/\ 顧客3 商品の数5個 売値€97800 レート 平均$0.824/€ 標準偏差$0.0342/€ 顧客4 商品の数2個 売値R4015000 レート 平均$0.0211/R  標準偏差$0.00083/R 1この四つの契約から得られる不確実な米ドル収入の平均、分散、標準偏差を求めよ。 2一部の通貨だけ米ドルに換え、残りは現地通貨のまま使ったり、貯蓄したり、別の必要な通貨に換えたりする予定としよう。リスクは増えるか、それとも減るか。 3うえの2の解答に基づくと全通貨を米ドルに交換するという仮定は良い仮定といえるか。 問題文が長くなり申し訳ないです。もし一つでも答えがわかるのでしたら、ぜひ答えと答えの出し方を教えてください。どうか、よろしくお願いします。

  • SQLでの複数検索条件の書き方を教えて下さい。

    SQLを使うことが初めての、本当にど素人です。 質問の仕方自体おかしいかもしれませんが、どなたか下記条件でデータ抽出するSQLの書き方を教えて下さい。 【抽出条件】 1つの商品購入テーブルから、5月と6月に購入してて、7月と8月に購入していない、東京都と神奈川県在住の方の顧客IDと購入商品すべてを抽出できないでしょうか? カラムは、顧客ID、購入月、顧客都道府県、商品コードとそれぞれ分かれています。 この内容で、ご回答いただけますでしょうか? 何卒よろしくお願いします。

  • (再度SQLのご指導を願います)

    先日にこちらの掲示板でご親切な方からアドバイスをいただき 試した結果、以下の通り若干の不具合が発生し、再度ご質問する次第です。 恐縮ながら以下にご教授いただければ幸いです。 テーブルは以下で仮定します。 ・注文テーブル 購入日 レジコード 顧客コード 顧客種別 商品NO購入金額 購入個数 年代 2011/01/01 111111 123456 通常 100 ¥100 1 20代 2011/01/02 111112 129999 通常 100 ¥300 3 50代 2011/01/02 111112 129999 通常 200 ¥200 1 50代 2011/01/02 111112 129999 通常 500 ¥500 2 50代 2011/02/01 111113 122222 新規 100 ¥100 1 90代 2011/02/05 111114 133333 新規 400 ¥400 1 10代 2011/02/11 111115 144444 通常 1000 ¥1,000 1 30代 2011/02/11 111115 144444 通常 100 ¥100 1 30代 2011/03/01 111116 155555 新規 100 ¥300 3 20代 2011/03/01 111116 155555 新規 200 ¥400 2 20代 2011/03/05 111117 166666 通常 500 ¥250 1 30代 2011/03/15 111118 177777 通常 400 ¥800 2 40代 2011/03/16 111119 188888 通常 100 ¥100 1 50代 2011/03/16 120000 123456 通常 100 ¥1,000 10 20代 2011/03/16 120000 123456 通常 400 ¥400 1 20代 2011/03/16 120000 123456 通常 200 ¥400 2 20代 2011/03/30 121000 144444 通常 100 ¥300 3 30代 2011/03/30 121000 144444 通常 1000 ¥3,000 3 30代 2011/03/30 121000 144444 通常 500 ¥750 3 30代 ・割引テーブル 商品NO 商品名開始日終了日 100 ごはん 2011/03/01 2011/03/30 100 ごはん 2011/01/01 2011/01/31 抽出したい内容 (1)注文テーブルにある購入日で日付を指定の上、(betweenで2010/06/01-2011/05/31までなど) 商品NOを特定の1品目、もしくは複数選択をした上で、その商品に対する期間内の購入数・購入金額を求めたい。 ただし、"割引テーブル"に差し掛かる期間のみ、別の列で分けて表示させたい。 (つまり割引期間と通常期間を列で分けることで売上の差を見極めたいのです。) これを以下の構文で試してみました。 SELECT t.購入日, t.商品NO, Sum(iif(t.購入日<w.開始日 or t.購入日>w.終了日,t.購入個数,0)) AS 通常購入, Sum(Switch(t.購入日<w.開始日 Or t.購入日>w.終了日,0,True,t.購入個数)) AS 割引購入, Sum(Switch(t.購入日<w.開始日 Or t.購入日>w.終了日,t.購入金額,True,0)) AS 通常購入金額, Sum(Switch(t.購入日<w.開始日 Or t.購入日>w.終了日,0,True,t.購入金額)) AS 割引購入金額 FROM 注文テーブル AS t INNER JOIN 割引テーブル AS w ON t.商品NO = w.商品NO WHERE (((t.商品NO)=100) AND ((t.購入日) Between #1/1/2011# And #3/30/2011#)) GROUP BY t.購入日, t.商品NO; 実行結果 購入日 商品NO 通常購入 割引購入 通常購入金額 割引購入金額 2011/01/01 100 1 1 ¥100 ¥100      2011/01/02 100 3 3 ¥300 ¥300      2011/02/01 100 2 0 ¥200 ¥0 2011/02/11 100 2 0 ¥200 ¥0 2011/03/01 100 3 3 ¥300 ¥300 2011/03/16 100 11 11 ¥1,100 ¥1,100 2011/03/30 100 3 3 ¥300 ¥300 上記のようになりました。 上記の割引テーブルで仮定すると、1月と3月の売り上げは”割引購入"と"割引購入金額"に記載され、2月の分は"通常購入"と"通常購入数"にその時の売り上げを出したいと考えております。 現在の結果の場合、割引テーブルで設定された割引期間内の"通常購入"と"通常購入数"にも数字が入ってしまっています、、。 理想の抽出結果は以下の通りです。 購入日 商品NO 通常購入 割引購入 通常購入金額 割引購入金額 2011/01/01 100 0 1 ¥0 ¥100      2011/01/02 100 0 3 ¥0 ¥300      2011/02/01 100 2 0 ¥200 ¥0 2011/02/11 100 2 0 ¥200 ¥0 2011/03/01 100 0 3 ¥0 ¥300 2011/03/16 100 0 11 ¥0 ¥1,100 2011/03/30 100 0 3 ¥0 ¥300 (2)注文テーブルにある購入日で日付を指定の上、(上記(1)と同様)商品NOを特定の1品目、もしくは複数選択をした上で、年代別で顧客種別ごとの客数を知りたい場合 ※上の客数は顧客種別かレジコードをカウントすれば良いと思いますが、一人のお客様が一回の会計で5品目買ったらレコードは5つになるため、重複を防ぐ必要があります。(対象の品物を何回購入したことがあるか表示したいので、、) また、"顧客種別"は通常・新規・フリーの三種類の言葉で分類分けされて登録されてますが、通常のみ、設定した抽出対象期間前にも1回でも購入があれば"リピート"としてカウント、過去に購入なく抽出対象期間内で初めて購入があった場合は"初めて"にカウントしたいです。 これを以下構文で試してみました。 SELECT t.商品NO , t.年代 , sum(switch(t.顧客種別='通常' and k.顧客コード is not null, 1 , true ,0)) as リピート , sum(switch(t.顧客種別='通常' and k.顧客コード is not null, 0 , true ,1)) as 初めて , sum(switch(t.顧客種別='新規' , 1 , true ,0)) as 新規 , sum(switch(t.顧客種別='フリー', 1 , true ,0)) as フリー FROM 注文テーブル t LEFT JOIN (SELECT 顧客コード FROM 注文テーブル WHERE 購入日<#2011/02/28#) k ON t.顧客コード = k.顧客コード WHERE t.購入日 between #2011/03/01# and #2011/03/31# and t.商品NO = 100 GROUP BY t.商品NO, t.年代 抽出結果 商品NO 年代 リピート 初めて 新規 フリー 100 20代 1 1 1 0 100 30代 2 0 0 0 100 50代 0 1 0 0 たとえば、3月1日~3月31日までの期間で抽出をすると 商品NO100の商品を買った30代のリピートの方は1名(顧客NO144444)だけに なると思いますが、抽出結果では2名になってしまいます。 ・対象の商品"100"を設定した対象期間内(上記の構文でいうと2011/03/01-2011/03/31) でしか購入がなかった場合は"初めて"としてカウント ・対象の商品"100"を設定した対象期間内(上記の構文でいうと2011/03/01-2011/03/31) で購入があり、且つその設定日付以前にも同じ商品の購入があった場合は"リピート"として カウント(設定日以前に同じリピート客が同じ商品を100回買ったとしても、100カウントではなく1カウント)リピートのお客様が"何回買ったか?"ではなく、"リピートしてる人が何人いるか?"を表したいのです。 これがが出来ないか頑張っています、、。 一番上のテーブルを仮定して理想の抽出結果は 商品NO 年代 リピート 初めて 新規 フリー 100 20代 1 0 1 0 100 30代 1 0 0 0 100 50代 0 1 0 0 お手数をおかけしますが、なにとぞご教授をお願いいたします。