聚合函数查询

时间:2013-04-30 06:30:15

标签: sql database ms-access

我想了解已批准的最高拨款金额的评估提案的详细信息。 查询存在一些问题,这是错误消息。 您试图在ms访问中执行不包含指定表达式“Title”的查询作为聚合函数。

SELECT Proposal.ProposalID,  Proposal.Title,  Proposal.RequestedAmmount, Researcher.Name, MAX(Proposal.RequestedAmmount)
FROM Researcher, Proposal
WHERE Researcher.ResearcherID=Proposal.ResearcherIDSub
GROUP BY  Proposal.ProposalID ;

由于

2 个答案:

答案 0 :(得分:2)

GROUP BY查询中,您需要对不在函数内的所有参数进行分组。因此,在您的情况下,Proposal.Title, Proposal.RequestedAmmount, Researcher.Name也需要进行分组。

您需要重新查看SELECTGROUP BY声明。看看您是否真的需要字段 - Proposal.TitleProposal.RequestedAmmountResearcher.Name。 如果你需要它们,也需要将它们分组。

答案 1 :(得分:0)

您的查询有两个问题:

  • 语法上group by必须列出所有非聚合列
  • 这是内部加入 - 意味着必须存在要返回研究人员的建议;没有建议的研究人员将被排除,而不是在MAX()栏中留下空格

要解决这些问题,请将查询更改为

  • GROUP BY 1, 2, 3, 4(SQL标准允许逐列显示表达式和列位置 - 我发现位置更清晰,更容易和更简洁)
  • 使用更现代的JOIN语法和LEFT选项
  • 使用外部连接

如下:

SELECT
    Proposal.ProposalID,
    Proposal.Title,
    Proposal.RequestedAmmount,
    Researcher.Name,
    MAX(Proposal.RequestedAmmount)
FROM Researcher
LEFT JOIN Proposal ON Researcher.ResearcherID=Proposal.ResearcherIDSub
GROUP BY 1, 2, 3, 4;