Оптимизация расчёт процентов - 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, удовлетворяющих определенным условиям.

  1. SELECT - выбранные поля или вычисления, которые должны быть возвращены в результате запроса.
  2. COUNT(CASE WHEN t.type = 0 THEN 1 ELSE NULL) - количество записей, удовлетворяющих условию, что поле type равно 0.
  3. COUNT(CASE WHEN t.type IN (0, 1, 3) THEN 1 ELSE NULL) - количество записей, удовлетворяющих условию, что поле type равно 0, 1 или 3.
  4. FROM t - указывается, из какой таблицы нужно выбрать данные. Таким образом, результатом выполнения данного запроса будет процент записей в таблице t, удовлетворяющих условию, что поле type равно 0, от общего количества записей в таблице, удовлетворяющих условию, что поле type равно 0, 1 или 3.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5