2016-04-14 4 views
0

Я работаю над SQL-заданием в Oracle. Есть две таблицы.SQL Assignment о соединении таблиц

table1 называется Person10:

поля включают в себя: ID, Fname, LName, штат, DOH, JobTitle, зарплата, Cat.

table2 называется StateInfo:

поля включают в себя: государство, StateName, Капитал, Ник, 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..да, давая мне ошибку: «не группа по выражению» – Anthony

0

Я не эксперт Oracle, но я уверен, что

Person10.Salary in BETWEEN (75000 AND 125000) 

должно быть

(не IN и не круглые скобки). Вот как все остальные диалекты SQL я знаю о работе.

Кроме того, переместите COUNT() из пункта WHERE в пункте HAVING:

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

Вы можете попробовать использовать Sub Query следующим образом.

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

Большое вам спасибо. Я никогда не думал, что это можно сделать с помощью вложенного оператора select. – Anthony

+0

Привет @AyazAmir, если этот или любой ответ решил ваш вопрос, пожалуйста, рассмотрите [его принятие] (http://meta.stackexchange.com/q/5234/179419), нажав на галочку. Это указывает более широкому сообществу, что вы нашли решение и дали некоторую репутацию как самому, так и самому себе. Это не обязательно. – Roberto

Смежные вопросы