Оптимизация расчёт процентов - MySQL
Формулировка задачи:
Прошу помощи в отпимизации запроса по расчёту процента от определённого кол-во, сам по себе запрос получается нестрашный, но когда на него накладываются условия, получается все печально...
Изначально запрос у меня выгрядит так:
select count(t.id)*100/(select count(t.id) from t where t.type in (0,1,2))
from t
where t.type = 0
Но когда начинают применятся фильтры к этому запросу и джоинится по 5-6 таблиц, получается что они сначала джойнятся в (select count(t.id) from t where t.type in (0,1,2), а потом в основной запрос, ну например, если я хочу ограничивать данные по времени, пользователю и тд... и запрос получается невероятно длинющим и в плане текста, и в плане отработки по времени.
возможно есть какаято мат.функция, или же как то можно один раз определить from t, а там где я делаю всякие каунты уже указывать, каунт чего на что я делю, может через case
Решение задачи: «Оптимизация расчёт процентов»
textual
Листинг программы
SELECT COUNT(CASE WHEN t.type = 0 THEN 1 ESLE NULL) * 100 / COUNT(CASE WHEN t.type IN (0, 1, 3) THEN 1 ESLE NULL) FROM t
Объяснение кода листинга программы
В данном коде производится вычисление процента записей в таблице t
, удовлетворяющих определенным условиям.
- SELECT - выбранные поля или вычисления, которые должны быть возвращены в результате запроса.
- COUNT(CASE WHEN t.type = 0 THEN 1 ELSE NULL) - количество записей, удовлетворяющих условию, что поле
type
равно 0. - COUNT(CASE WHEN t.type IN (0, 1, 3) THEN 1 ELSE NULL) - количество записей, удовлетворяющих условию, что поле
type
равно 0, 1 или 3. - FROM t - указывается, из какой таблицы нужно выбрать данные.
Таким образом, результатом выполнения данного запроса будет процент записей в таблице
t
, удовлетворяющих условию, что полеtype
равно 0, от общего количества записей в таблице, удовлетворяющих условию, что полеtype
равно 0, 1 или 3.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д