2013-10-11 3 views
0

У меня есть 2 таблицы Corporations (business_id, corp_name) и Positions (business_id, заработная плата, местоположение) `Нахождение одного атрибута значение MAX

Я пытаюсь найти название корпорации с максимально уплаченная позиция в определенном месте.

ex. Какой корпус имеет самую высокую оплачиваемую должность в Орландо? (Я просто хочу имя Corp и зарплату, чтобы показать, как (НАСКАР, 90000))

SELECT MAX(salary) 
FROM Positions 
WHERE location = 'Orlando' 
GROUP BY compid 

Однако вместо 1 результата я получаю все корпорации и их положение зарплату за Орландо.

+0

SQL является языком программирования. Какие СУБД вы используете? MySQL, DB2, Postgres, SQLite, ...? –

+0

И ваш код имеет 'compid', в то время как определения таблиц нет!? –

+0

Одним из решений является поместить «коррелированный подзапрос» в предложение WHERE. –

ответ

0

Вам необходимо присоединиться к двум таблицам, чтобы получить название компании. Вы не говорите нам, что такое compid, но вот почему вы получаете несколько результатов - по одному для каждого comp_id.

Предполагая, что business_id является иностранным ключом для корпораций, это должно обеспечить вам то, что вам нужно.

SELECT Corporations.Corp_Name, MAX(Positions.Salary) 
FROM Positions 
INNER JOIN Corporations ON Corporations.Business_id = Positions.Business_id 
WHERE Positions.Location = 'Orlando' 


If comp_id is your foreign key, use this 
SELECT Corporations.Corp_Name, MAX(Positions.Salary) 
FROM Positions 
INNER JOIN Corporations ON Corporations.Comp_id = Positions.Comp_id 
WHERE Positions.Location = 'Orlando' 
+0

Это дает мне ORA-00937: не групповая групповая функция ошибка – Fstagger

+0

Какой из двух запросов? – Carl

+0

Оба дали ошибку. – Fstagger

-1

Код для ISO/ANSI стандарта SQL:

SELECT c.comp_name, p.salary 
FROM Positions p 
    JOIN Corporations c 
    ON c.business_id = p.business_id 
WHERE p.location = 'Orlando' 
ORDER BY p.salary DESC 
    FETCH FIRST 1 ROWS ONLY ; 
Смежные вопросы