Подсчет данных с запросом mysql

у меня есть следующая таблица

id   kelurahan    status
1    Pegambiran   Netral
2    Pegambiran   Netral
3    Kejaksan     Positif
4    Kesenden     Positif
5    Pegambiran   Negatif

я хочу получить такой результат

kelurahan    count_positif   count_netral   count_negatif   total
Pegambiran   0               2              1               3
Kejaksan     1               0              0               1
Kesenden     1               0              0               1

я попробовал этот запрос

SELECT kelurahan, 
(SELECT COUNT(status) FROM tbl_monitoring WHERE status = 'Positif' GROUP BY kelurahan LIMIT 1) AS count_positif, 
(SELECT COUNT(status) FROM tbl_monitoring WHERE status = 'Netral' GROUP BY kelurahan) AS count_netral,
(SELECT COUNT(status) FROM tbl_monitoring WHERE status = 'Negatif' GROUP BY kelurahan) AS count_negatif, 
COUNT(kelurahan) AS total 
FROM tbl_monitoring GROUP BY kelurahan

я получаю такой результат

Подсчет данных с запросом mysql

любая помощь будет оценена, спасибо.

Вместо того, чтобы запускать count_[COLUMN] как подзапросы к SELECT (например, избегать (SELECT COUNT(status) ...)), вы можете использовать комбинацию SUM и CASE из самой таблицы для выполнения агрегата — например, SUM(CASE WHEN status = 'Positif' THEN 1 ELSE 0 END)

Anthony Forloney 11.05.2022 04:18
Освоение архитектуры микросервисов с 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
1
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Вы должны использовать SUM, а не COUNT.
  2. Проверено на dbfiddle
SELECT 
  kelurahan, 
  SUM(CASE WHEN status = 'Positif' THEN 1 ELSE 0 END) AS count_positif,
  SUM(CASE WHEN status = 'Netral' THEN 1 ELSE 0 END) AS count_netral,
  SUM(CASE WHEN status = 'Negatif' THEN 1 ELSE 0 END) AS count_negatif,
  SUM(1) AS total
FROM tbl_monitoring
GROUP BY kelurahan;

спасибо за ваш ответ, это работает как шарм. и я хочу спросить, что означает SUM(1)?

Yoshioka 11.05.2022 04:27

sum(1) эквивалентно count(*), который возвращает количество всех строк для группы (kelurahan).

EmbraceNothingButFuture 11.05.2022 04:34

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