Question

Je ne comprends pas pourquoi cela ne fonctionne pas et comment le réparer, j'ai essayé différentes choses comme écrire

select COUNT(p.OwnerUserId)

mais cela ne fonctionne pas et je ne comprends pas les msgs d'erreur. Je n'utilise MS SQL (j'utilise SQLite et MySQL).

Comment puis-je écrire cette requête afin que je puisse faire un filtrage du QC de 10 ou 50? (Où QC> 50 ET ...)

Plug Fondamentalement dans le SQL ci-dessous dans cette URL, exécutez et vous verrez 1 dans les résultats. http://data.stackexchange.com/stackoverflow/query/new

SELECT
    TOP 100
    p.OwnerUserId  AS [User Link],
    sum(ViewCount) as VC,
    avg(ViewCount) as AVC,
    COUNT(p.OwnerUserId ) as QC

FROM Posts p
join Users on p.OwnerUserId = Users.Id
where PostTypeId = 1 and ViewCount<10000 and CommunityOwnedDate is null
group by p.OwnerUserId
order by AVC desc
Était-ce utile?

La solution

SELECT
    TOP 100
    p.OwnerUserId  AS [User Link],
    sum(ViewCount) as VC,
    avg(ViewCount) as AVC,
    COUNT(p.OwnerUserId ) as QC
FROM Posts p
join Users on p.OwnerUserId = Users.Id
where PostTypeId = 1 and ViewCount<10000 and CommunityOwnedDate is null
group by p.OwnerUserId
HAVING COUNT(p.OwnerUserId ) between 10 and 50   -- <<<<<
order by AVC desc

Une autre option est d'en faire une sous-requête

SELECT
    TOP 100
FROM (
SELECT
    p.OwnerUserId  AS [User Link],
    sum(ViewCount) as VC,
    avg(ViewCount) as AVC,
    COUNT(p.OwnerUserId ) as QC
FROM Posts p
join Users on p.OwnerUserId = Users.Id
where PostTypeId = 1 and ViewCount<10000 and CommunityOwnedDate is null
group by p.OwnerUserId
) SQ
WHERE QC >= 50
order by AVC desc

Autres conseils

Vous devez utiliser HAVING pour filtrer un champ agrégé

Essayez ceci:

SELECT
    TOP 100
    p.OwnerUserId  AS [User Link],
    sum(ViewCount) as VC,
    avg(ViewCount) as AVC,
    COUNT(p.OwnerUserId ) as QC

FROM Posts p
join Users on p.OwnerUserId = Users.Id
where PostTypeId = 1 and ViewCount<10000 and CommunityOwnedDate is null
group by p.OwnerUserId  
HAVING COUNT(p.OwnerUserId ) > 50
order by AVC desc

Lorsque vous utilisez des agrégats, vous devez utiliser having au lieu de where.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top