2016-04-17 2 views
0

初めてのポスター/ Oracle newb。where句にmin、maxを表示する=値が多すぎますか?

私はこれまでのところ、私はminまたはmaxのいずれかを表示することができ、where句で最小値と最大年齢を表示しようとしている

が、私はそれらを表示しようとすると、両方のそれは

ORA-00913を返します。あまりにも多くの値」

ここでは、(正常に動作します)最小/最大のために私のコードです。

SELECT ROUND 
((SYSDATE - TO_DATE (DOB)) /365, 0) "AGE" 
FROM EMPLOYEE 
WHERE 
DOB = (SELECT MIN (DOB) FROM EMPLOYEE); 

私は一緒のようにそれらを置くとき -

SELECT ROUND 
((SYSDATE - TO_DATE (DOB)) /365, 0) "AGE" 
FROM EMPLOYEE 
WHERE 
DOB = (SELECT MIN (DOB), MAX (DOB) FROM EMPLOYEE); 

問題が発生する場所はどこですか、私はANDを使って分割しようとしましたが、それはまったく助けません。もっと何ができるかわからない、どんな助けもありがとう。

答えて

0

Min(DOB)は1つの値なので、where句には=を使用できます。しかし、あなたはINを使用する必要がありますので、複数の値を(SELECT MIN (DOB), MAX (DOB) FROM EMPLOYEE)返します

SELECT ROUND 
((SYSDATE - TO_DATE (DOB)) /365, 0) "AGE" 
FROM EMPLOYEE 
WHERE 
DOB IN (SELECT MIN (DOB), MAX (DOB) FROM EMPLOYEE); 
+0

これも値が多すぎます。しかし、返信をありがとう。 – bigmouthsmithers

+1

このように記述すると、サブクエリは2つの列を返します。これは少しのSQLスキルを示しているだけでなく、あなたが他人を教える前にもっと学んでください! - 投稿前にあなたの質問をテストしなかったことも示しています。真の専門家がテストせずに投稿できるようにする。テストまで、そして投稿してください。 – mathguy

0

私が正しく理解し、あなたが最小であるDOB値を持つすべてのEMPLOYEESレコードを取得しようと、最大にしている場合データベースの場合は、SELECTのデータを使用し、次にORを使用してデータをロードします。

DECLARE 
    max_dob datetime; 
    min_dob datetime; 

SELECT MAX(DOB), MIN(DOB) INTO max_dob, min_dob 
FROM EMPLOYEES; 

SELECT ROUND 
((SYSDATE - TO_DATE (DOB)) /365, 0) "AGE" 
FROM EMPLOYEE 
WHERE DOB = min_dob 
OR DOB = max_dob; 
+0

なぜそれは複雑である必要がありますか? – mathguy

-1

なぜANDを使用して分割しようとしましたか?あなたは同時に最大と最大のDOBを探していますか?あなたの難しさは、SQLではなく、論理です!

これは動作します:

SELECT ROUND ((SYSDATE - TO_DATE(DOB)) /365, 0) AS AGE 
FROM EMPLOYEE 
WHERE DOB = (SELECT MIN(DOB) FROM EMPLOYEE) OR DOB = (SELECT MAX(DOB) FROM EMPLOYEE) 

さらにいくつかの注意事項 - 私は、彼らが必要とされていない、AGE周りから二重引用符を削除(とあなたが引用符が必要な場合は、一般的に、あなたは検討する必要があります代わりにエイリアスを変更する)、そして私はオプションの単語ASを列エイリアスの前に追加しました。必須ではありませんが、クエリをより読みやすくします。また、あなたの質問:DOBはすでに日付か、文字列形式で保存されていますか?すでに日付が指定されている場合は、TO_DATEは必要ありません。TO_DATEには文字列が必要なため、実際には間違った結果が得られる可能性があります。これまでのところ、両方のコンバージョンで使用されている暗黙的なデフォルトの日付フォーマットに応じて、コンバージョンがすべて正しいと確信することはできません。 DOBが基本表の文字列データ型である場合は、最初にはいけません.2番目の場合は、TO_DATEに書式パラメータを指定する必要があります。運行には依存しません。 Oracleが使用する変換フォーマットが基本表に日付を格納するために使用されるフォーマットと同じであることを望む場合は、運が必要です。

幸運を祈る!

+0

興味深い議決権行使、その理由について不思議に思うでしょう:答えに間違った、不明瞭な、または不必要なものはありますか?それとも何か他の無関係の理由? – mathguy

関連する問題