如何在sql查询中一起使用order by和aggregate函数

时间:2010-05-14 10:59:52

标签: sql sql-order-by aggregate-functions

SELECT
    count(distinct req.requirementid),
    req.requirementid,
    org.organizationid,
    req.locationofposting,
    org.registereddate
FROM OrganizationRegisteredDetails AS org,
    RequirementsDetailsforOrganization AS req
WHERE org.organizationid = req.requirementid
ORDER BY
    org.RegisteredDate desc

这显示了错误:

  

色谱柱   'RequirementsDetailsforOrganization.RequirementID'   在选择列表中无效,因为   它不包含在任何一个中   聚合函数或GROUP BY   子句。

如何在此查询中执行'org.RegisteredDate desc'命令....

请帮帮我..... ??????

2 个答案:

答案 0 :(得分:2)

您需要将SELECT列表或ORDER BY中引用的所有列添加到GROUP BY子句中。

SELECT 
    count(distinct req.requirementid), 
    req.requirementid, 
    org.organizationid, 
    req.locationofposting, 
    org.registereddate 
FROM OrganizationRegisteredDetails AS org, 
    RequirementsDetailsforOrganization AS req 
WHERE org.organizationid = req.requirementid 
GROUP BY
    req.requirementid, 
    org.organizationid, 
    req.locationofposting, 
    org.registereddate 
ORDER BY 
    org.RegisteredDate desc 

虽然在这种情况下,你只会在所有行的第一列中获得值1,因为你在req.requirementid上进行分组!

答案 1 :(得分:1)

错误是因为根据规则,当您使用具有group by子句的聚合函数时,您必须包含选择列表中的列

以下内容可帮助您实现所需功能

   (select count(distinct requirementid),requirementid,
     from 
    RequirementsDetailsforOrganization
    group by requirementid) d

    inner join 

    (   SELECT req.requirementid, org.organizationid,

req.locationofposting,org.registereddate FROM OrganizationRegisteredDetails AS org, 

RequirementsDetailsforOrganization AS req WHERE org.organizationid =req.requirementid order by org.RegisteredDate desc) d1
   on 
    d.requirementid= d1.requirementid