2016-04-14 14 views
0

私はOracleでのSQLの割り当てに取り組んでいます。 2つのテーブルがあります。SQL結合表の結合について

TABLE1がPerson10と呼ばれている:

のフィールドが含まれます:ID、FNAME、LNAME、国家、DOH、JobTitle、給与、猫を。

table2のはStateInfoと呼ばれている:

のフィールドが含まれます:国家、ステート名、資本金、ニックネーム、Pop2010、pop2000、pop1990、sqmilesを。

質問:

Create a view named A10T2 that will display the StateName, Capital and Nickname of the states that have at least 25 people in the Person10 table with a Cat value of N and an annual salary between $75,000 and $125,000. The three column headings should be StateName, Capital and Nickname. The rows should be sorted by the name of the state.

私が持っているもの:

CREATE VIEW A10T2 AS 
SELECT StateName, Capital, Nickname 
FROM STATEINFO INNER JOIN PERSON10 ON 
    STATEINFO.STATE = PERSON10.STATE 
WHERE Person10.CAT = 'N' AND 
     Person10.Salary in BETWEEN (75000 AND 125000) AND 
     count(Person10.CAT) >= 25 
ORDER BY STATE; 

それは私に欠けている表現を言ってエラーが発生します。私はグループ表現が必要かもしれません...しかし、私は間違って何をしているのかわかりません。

+0

詳細なエラーメッセージを投稿できますか? – Dresden

答えて

1

、それはその場にあったと私は私がダウンして入れていたものをテストする機会を持っていなかったので、私は最初にこのに答えたときにそう私はもともとこれを台無しに。私はGROUP BYを使用することを忘れて集計関数(SUM、AVG、COUNTなど)の選択に適しています。それはおそらくエラーを投げているのです。この場合、おそらくORDER BYを使用するのは正しいオプションです。 StateNameを使用するように、状態別に結果を並べ替える必要があります。

SELECT S.StateName, S.Capital, S.Nickname 
FROM STATEINFO S 
INNER JOIN PERSON10 P ON S.STATE = P.STATE 
WHERE P.CAT = 'N' 
AND P.Salary BETWEEN 75000 AND 125000 
ORDER BY S.StateName 
HAVING count(P.CAT) >= 25; 
+0

こんにちは。ソリューションに感謝しますが、私はまだ "GROUP BY式ではない"と言っているエラーを受けています – Anthony

+0

あなたが幾分説明すれば、これははるかに良い答えになります。コードだけで構成されるアンサーは、通常、他のユーザーには役に立ちません。 –

+0

Ehh..still私にエラーを与える: "表現でグループではない" – Anthony

0

私はオラクルの専門家だが、私は

Person10.Salary in BETWEEN (75000 AND 125000) 

かなり確信しているが

(無INなし括弧)でなければなりません。それが、私が仕事で知っている他のすべてのSQL方言の仕方です。また

HAVING節へWHERE句からCOUNT()を移動:

CREATE VIEW A10T2 AS 
SELECT StateName, Capital, Nickname 
FROM STATEINFO INNER JOIN PERSON10 ON 
    STATEINFO.STATE = PERSON10.STATE 
WHERE Person10.CAT = 'N' AND 
     Person10.Salary BETWEEN 75000 AND 125000 
ORDER BY STATE 
HAVING count(Person10.CAT) >= 25; 
0

あなたは、このようなサブクエリを使用して試すことができます。

CREATE VIEW A10T2 AS 
SELECT statename, capital, nickname 
FROM stateinfo 
WHERE statename IN (SELECT statename 
        FROM person10 
        WHERE Cat = 'N' 
        AND Salary BETWEEN 75000 AND 125000 
        GROUP BY statename 
        HAVING COUNT(*) >= 25) 
ORDER BY statename 
+0

ありがとうございます。私はこれがネストされた選択ステートメントで実行できるとは考えていませんでした。 – Anthony

+0

こんにちは@AyazAmirこれまたは任意の答えがあなたの質問を解決した場合は、[それを受け入れる](http://meta.stackexchange.com/q/5234/179419)をチェックしてください。これは、あなたが解決策を見つけ出し、回答者とあなた自身の両方に評判を与えていることを広範なコミュニティに示します。これを行う義務はありません。 – Roberto