HAVING COUNT( n.type = 'article' ) > 3
Почему это не работает (re: я не могу понять, что я делаю неправильно) :
n.type = 'article'
<< это возвращает BOOLEAN, который имеет значение true / false или 1/0 </li> - COUNT (x) увеличивает счетчик всякий раз, когда x НЕ равен NULL
- оба из 1/0 не равны нулю, поэтому он считает ВСЕ типы и эквивалентен COUNT (*)
Вы хотели (этот ответ уже был дан, но повторяется здесь)
SELECT n.uid
FROM node
WHERE n.type = 'article'
GROUP BY n.uid
HAVING COUNT( * ) > 3
В общем, вы также можете правильно написать COUNT, используя CASE, но фильтр WHERE обычно быстрее
SELECT n.uid
FROM node
GROUP BY n.uid
HAVING COUNT( CASE WHEN n.type = 'article' THEN 1 END ) > 3