2013-05-10 6 views
0

Я использую базу данных MS Access. У меня есть таблица (Предложение) со следующими свойствами: ProposalID - PK, Title, RequestedAmount, ResearcherID - FKПолучить максимальное значение

Я хочу запустить SQL-запрос, чтобы получить запрошенного кандидата на самую высокую сумму. Мой запрос, который не работал в:

Select ProposalID, Title, Max(RequestedAmount) AS Budget, ResearcherID 
From 
Proposal; 

Как я могу это исправить .. Спасибо

+0

что было результат? –

+0

@ Abdullah Shoaib - Это возвращает эту ошибку .. «Вы пытались выполнить запрос, который не включает указанное выражение« ProposalID »как часть функции агрегата» – akinboj

ответ

0
Select ProposalID, Title, RequestedAmount AS Bugdet, ResearcherID 
From Proposal 
WHERE RequestedAmount = (SELECT MAX(RequestedAmount) FROM Proposal); 

Вы можете попробовать это ...

+1

@ Ravi Pal - Это сработало, но вы пропустили RequestedAmount в запросе: см. Мое редактирование вашего ответа: выберите ProposalID, Title, RequestedAmount, ResearcherID Из предложения WHERE RequestedAmount = (SELECT MAX (RequestedAmount) FROM Proposal); – akinboj

+0

@akinboj - Спасибо, я исправил его ..... –

0

Использование GROUP BY

Select ProposalID, Title, Max(RequestedAmount) AS Budget, ResearcherID 
From 
Proposal GROUP BY proposalID; 

Это потому, что вы перечислили несколько столбцов в вашем SQL SELECT которые не инкапсулированы в функцию MAX, поэтому вы должны использовать предложение SQL GROUP BY.

+0

@ Abdullah Shoaib- Он вернул все значения в таблице вместо максимальный RequestedAmount и другие соответствующие поля (ProposalID, Title, .etc) – akinboj

0

В агрегатной функции с использованием запросов, все выбранные значения должны быть либо

1) в группе

2) агрегатной функции.

Это потому, что max - это не единственная функция агрегата - представьте, если вы использовали AVG вместо MAX. Какие значения SQL должен предоставить для других строк, которые применяются только к одной строке? Невозможно выбрать, поэтому вы не можете выразить такой запрос.

Но вы хотите не собирать, а НАЙТИ строку с наивысшим запрошенным количеством. Так что давайте делать:

Select ProposalID, Title, RequestedAmount AS Budget, ResearcherID 
From 
Proposal 
Where Budget >= ALL (select RequestedAmount from Proposal) 
1

Вы можете попробовать это один

SELECT TOP 1 Proposal.ProposalID, Proposal.Title, (Select MAX(Proposal.RequestedAmount) from Proposal) AS Budget, Proposal.ResearcherID FROM Proposal; 

Надеется, что это помогает ....

+0

@ Nithin - Это работает, но, к сожалению, нам не научили предложение Select Top в Uni, поэтому я не могу его использовать. Любой альтернативный синтаксис SQL для решить это? – akinboj