У меня есть следующий SQL-запрос:
SELECT `NeighbourhoodName`,
count(NAME) as `Number of Parks`,
sum(CASE
WHEN `parks`.`Advisories` = 'Y' THEN 1
ELSE 0
END) as Advisories,
FROM parks
GROUP BY `NeighbourhoodName`;
Во второй строке кода я создаю столбец «Количество парков». Я хотел бы, чтобы все значения в следующем столбце (рекомендации) были разделены на значения в «Количество парков». Однако, когда я пытаюсь вставить оператор деления после столбца следующим образом:
SELECT `NeighbourhoodName`,
count(NAME) as `Number of Parks`,
sum(CASE
WHEN `parks`.`Advisories` = 'Y' THEN 1
ELSE 0
END)/`Number of Parks` as Advisories
FROM parks
GROUP BY `NeighbourhoodName`;
Я получаю следующую ошибку:
Unknown column, `Number of Parks` in field list.
Как я могу выполнить это деление, сохранив его в одном запросе?
Я не могу повторить счет в делении, потому что деление нужно сделать после оператора groupby






Вам нужно использовать внешний запрос для выполнения деления.
SELECT `NeighbourhoodName`,
`Number of Parks`,
Advisories/`Number of Parks` as Advisories
FROM ( SELECT `NeighbourhoodName`,
count(NAME) as `Number of Parks`,
sum( CASE WHEN `parks`.`Advisories` = 'Y' THEN 1 ELSE 0 END ) as Advisories
FROM parks
GROUP BY `NeighbourhoodName`
) as tbl;
Проблемы с псевдонимами столбцов
Псевдоним можно использовать в списке выбора запроса, чтобы дать столбцу другое имя. Вы можете использовать псевдоним в GROUP BY, ORDER BY или HAVING предложения для ссылки на столбец.
Или используйте выражение count(Name) вместо Number of Parks:
select NeighbourhoodName,
count(Name) as `Number of Parks`,
sum(case when Advisories='Y' then 1 else 0 end)
/count(Name) as Advisories
from parks
group by NeighbourhoodName;
Это не работает, потому что подсчет выполняется во время группировки.
@imad97 imad97 Работает в MySQL 8.0.26. Может быть, вы запускали его в более ранней версии?
Вы не можете использовать в одном и том же операторе select псевдоним, который вы используете для имени поля, либо сделать его подзапросом, либо просто повторить подсчет в разделе.