Разделить одну таблицу на другую таблицу, созданную в том же запросе

У меня есть следующий 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.

Как я могу выполнить это деление, сохранив его в одном запросе?

Вы не можете использовать в одном и том же операторе select псевдоним, который вы используете для имени поля, либо сделать его подзапросом, либо просто повторить подсчет в разделе.

Jorge Campos 23.11.2022 20:39

Я не могу повторить счет в делении, потому что деление нужно сделать после оператора groupby

imad97 23.11.2022 20:40
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
2
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно использовать внешний запрос для выполнения деления.

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 24.11.2022 04:46

@imad97 imad97 Работает в MySQL 8.0.26. Может быть, вы запускали его в более ранней версии?

JHH 24.11.2022 06:40

Другие вопросы по теме