Как включить агрегированный столбец в предложение where? - PullRequest
3 голосов
/ 08 марта 2019

У меня есть таблица из двух столбцов farmer_crops, в которой хранятся отношения между фермером и сельскохозяйственными культурами, которые они выращивают.Фермер может выращивать одну или несколько культур.Приведенный ниже запрос дает мне отдельных фермеров и общий урожай, который они выращивают.Как я могу получить общее количество фермеров, которые выращивают урожай выше одного (my_crops> 1)?

select distinct farmer_id, count(crop_id) as my_crops 
from farmer_crops 
group by farmer_id

[править] Используя подсказку GMB, приведенный ниже запрос дает мне в общей сложности 2330 строк, чтоправильно.

SELECT farmer_id, count(crop_id) as my_crops 
FROM farmer_crops 
GROUP BY farmer_id
HAVING count(crop_id) > 1

Однако, что мне действительно нужно, так это запрос ниже, просто общее число, но столбец total_farmers возвращает число 8330, что неверно.

SELECT count(farmer_id) as total_farmers 
FROM farmer_crops
HAVING count(crop_id) > 1

1 Ответ

2 голосов
/ 08 марта 2019

Условия для агрегатного выражения не могут использоваться в предложении WHERE. Вам нужно использовать HAVING вместо:

SELECT farmer_id, count(crop_id) as my_crops 
FROM farmer_crops 
GROUP BY farmer_id
HAVING count(crop_id) > 1

В отличие от предложения WHERE, предложение HAVING следует после предложения GROUP BY.

NB: SELECT DISTINCT обычно не имеет смысла с GROUP BY, я удалил его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...