Comment utiliser Count (*) dans une déclaration où?
-
27-10-2019 - |
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
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
.