質問: 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以上の中で最小値の講師コードを取得したいのですが、どこが間違っているのでしょうか? アドバイスをよろしくお願いします。
回答: 条件いまいちよく分かりませんので、取りあえず以下のパターンで。 「交通費が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] 高度な副問合せの構文