Как использовать Count (*) в операторе where? - PullRequest
2 голосов
/ 29 января 2011

Я не понимаю, почему это не работает и как это исправить, я пробовал разные вещи, такие как запись

select COUNT(p.OwnerUserId)

, но это не работает, и я не понимаю сообщения об ошибках,Я не использую MS SQL (я использую SQLite и MySQL).

Как мне написать этот запрос, чтобы я мог отфильтровать КК по 10 или 50?(где QC> 50 AND ...)

В основном вставьте приведенный ниже SQL в этот URL, запустите его, и вы увидите 1 в результатах.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

Ответы [ 3 ]

7 голосов
/ 29 января 2011

Для фильтрации агрегированного поля необходимо использовать выражение «Имея»

Попробуйте это:

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
2 голосов
/ 29 января 2011

Когда вы используете агрегаты, вы должны использовать having вместо where.

1 голос
/ 29 января 2011
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

Другой вариант - сделать его подзапросом

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
...