Sql - исключить значение 0

0

Я выполняю этот запрос

SELECT Kd_penyakit, Penyakit,
COUNT(case when Kd_gejala in ('G01','','G03','G04','','','','','','','','','','','','','','','','','','')then 1 else null end) / COUNT(kd_penyakit)*100 AS cases
FROM tbl_casebase 
GROUP BY Kd_penyakit 
ORDER BY cases DESC

и результат подобен этому

Kd_penyakit   Penyakit         cases

P01           Tipus Ayam       42.8571
P06           Produksi Telur   25.0000
P03           Salesma Ayam     14.2857
P02           Berak Darah      0.0000
P04           Gumboro          0.0000
P05           Mareks           0.0000

мой вопрос заключается в том, как исключить значения 0, чтобы результат был таким же

Kd_penyakit   Penyakit         cases

P01           Tipus Ayam       42.8571
P06           Produksi Telur   25.0000
P03           Salesma Ayam     14.2857
Теги:
phpmyadmin

2 ответа

0
Лучший ответ

Отфильтруйте нежелательные строки перед агрегатами, используя exists:

SELECT Kd_penyakit, Penyakit,
COUNT(case when Kd_gejala in ('G01','G03','G04','') then 1 end) / COUNT(kd_penyakit)*100 AS cases
FROM tbl_casebase 
where exists (
   select 1 from tbl_casebase t2
   where tbl_casebase.Kd_penyakit = t2.Kd_penyakit
   and t2.Kd_gejala in ('G01','G03','G04','')
   )
GROUP BY Kd_penyakit
ORDER BY cases DESC
;

Заметьте, вы можете опустить "else null" при использовании выражения case с count()

0

Один из способов - отфильтровать его в предложении HAVING, используя одно и то же выражение

SELECT ...
FROM ...
GROUP BY ...
HAVING COUNT(case when Kd_gejala in ('G01','','G03','G04','','','','','','','','','','','','','','','','','','')then 1 else null end) / COUNT(kd_penyakit)*100 > 0
ORDER BY ...

Поскольку вы используете mysql, его можно просто написать с помощью ALIAS хотя это не стандартная практика и работает только в mysql, и когда расширение ONLY_FULL_GROUP_BY освобождено.

SELECT ...
FROM ...
GROUP BY ...
HAVING cases > 0
ORDER BY ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню