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

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

ただいまの
回答率

88.91%

Oracle SQLでの条件指定

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 232

seiya0621

score 29

SQL> SELECT "従業員番号" FROM "A会社"
2  WHERE "交通費" > 5000;

従業員番号     交通費
---------- ----------
85001            8900
86010           10200
87003            6000
85003            8800

となります。

ここで"交通費"が5000以上の場合の最小値の"従業員番号"を取得したいのですが、うまくいきません。

試したのは、
SELECT "従業員番号" FROM "A会社"
2  WHERE MIN("交通費") > 5000;

ORA-00934: ここではグループ関数は使用できません。とでます。

また、
SQL> SELECT "従業員番号" FROM "新宿校舎"
2  HAVING MIN("交通費") > 5000;

ORA-00937: 単一グループのグループ関数ではありません。とでます。

SQL> SELECT "従業員コード" FROM "新宿校舎"
2  HAVING MIN("交通費") > 5000
3  GROUP BY "ド従業員コード";

とすると

従業員コード

85001
85003
86010
87003

となり"交通費"が5000以上の従業員コード全てがでてきてしまいます。

交通費が5000以上の中で最小値の講師コードを取得したいのですが、どこが間違っているのでしょうか?

アドバイスをよろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • tetsunosuke

    2020/07/07 10:08

    どのようなエラーが出ているのかも書いてみましょう

    そしてそのエラーを見るとMINを使うときにGROUP BY を合わせて使うことが必要、という結論にたどり着くはずです。

    キャンセル

  • seiya0621

    2020/07/07 10:22

    ありがとうございます。 GROUP BYを使用してみましたが、希望するデータは取得できませんでした。

    アドバイスお願いいたします。

    キャンセル

  • Orlofsky

    2020/07/07 10:44

    Markdownの使い方は覚えて質問を修正しましょうね。
    SQLなどのコードは https://teratail.com/help/question-tips#questionTips3-7 の [コード] に修正してください。

    キャンセル

  • Orlofsky

    2020/07/07 10:45

    質問のテーブルの定義はCREATE TABLE文に変更し、テーブル中のデータはINSERT文に変更して https://teratail.com/help/question-tips#questionTips3-7 の [コード] で提示してください。
    全角空白が入っているのでエラーになります。

    キャンセル

回答 1

checkベストアンサー

0

条件いまいちよく分かりませんので、取りあえず以下のパターンで。

「交通費が5,000超過のうち最小額のデータ」

select * from A会社
where 交通費 in (
       select min(交通費) from A会社 where 交通費 > 5000
      )


「交通費が5,000超過のうち最小額であるデータの最小従業員番号」

select min(従業員番号) from A会社
where 交通費 in (
       select min(交通費) from A会社 where 交通費 > 5000
      )


「交通費が5,000超過のうち最小額であるデータの最小従業員番号」※exists

select min(従業員番号) from A会社 t
where 交通費 > 5000
  and not exists (
       select 1 from A会社 where 交通費 > 5000 and 交通費 < t.交通費 
      )


[DB] 副問合せと相関副問合せの違い [SQL]
高度な副問合せの構文

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/07/07 11:26

    2点質問をお願いいたします。

    ① exists ( select 1 from A会社 ~) の1は何を指しているのでしょうか?

    ② exists ( select 1 from A会社 ~ 交通費 < t.交通費) の
    交通費 < t.交通費 の部分が理解ができていないです。

    交通費とt.交通費は複数のデータがあると思うのですが、比較することができるのでしょうか? 

    的外れなことを質問していたらも申し訳ありません。

    キャンセル

  • 2020/07/07 11:53 編集

    ①existsは存在するかどうかなので、select項目は何でも良いのです。
    ②相関副問合せを理解する必要があります。existsは殆ど相関副問合せで行います。
    リンクを回答に追記します。

    キャンセル

  • 2020/07/07 12:03

    ありがとうございます! 確認してみます!

    キャンセル

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

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

関連した質問

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