как использовать функцию заказа и агрегирования вместе в запросе sql

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» в этом запросе....

пожалуйста помогите.....??????


person Innova    schedule 14.05.2010    source источник
comment
Вы пытаетесь подсчитать отдельные идентификаторы требований, а также передать их в список SELECT - это не сработает. Как бы вы хотели, чтобы результаты выглядели?   -  person Daniel Renshaw    schedule 14.05.2010
comment
Вы пытаетесь использовать функцию Count, поэтому ваш запрос должен быть сгруппирован со всеми полями (group by). Итак, чего вы хотите добиться с помощью запроса и счетчика?   -  person Tim    schedule 14.05.2010


Ответы (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!

person Daniel Renshaw    schedule 14.05.2010
comment
+1, просто помните, что каждый столбец, возвращаемый в списке выбора, должен быть либо вызовом функции aggergate, либо элементом в списке GROUP BY. - person KM.; 14.05.2010

Ошибка существует, потому что в соответствии с правилом, когда вы используете агрегатную функцию с предложением 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
person Pranay Rana    schedule 14.05.2010