Для запроса сначала я создаю агрегированную таблицу, таблицу предварительной обработки, как показано ниже: запрос
- запрос №. 1
DROP VIEW IF EXISTS aggregated;
CREATE VIEW aggregated as
SELECT
`date`,
district,
town,
locality,
vendor,
freq_kind,
bandwidth,
circle_id,
SUM(data_total),
SUM(capacity),
CASE WHEN (SUM(IFNULL(data_total,0))/SUM(IFNULL(capacity,0))) * 100 < 50 THEN 1 ELSE 0 END AS productivity
FROM (
SELECT
circle_id,
`date`,
district,town,locality,vendor,freq_kind,bandwidth,
site_id,
`download`+`upload` AS data_total,
CASE WHEN freq_kind = "2300" AND bandwidth = "20 MHz" THEN 105
WHEN freq_kind = "2300" AND bandwidth = "15 MHz" THEN 80
WHEN freq_kind = "2300" AND bandwidth = "10 MHz" THEN 45
ELSE 0 END AS capacity
FROM websites WHERE `date` = "2020-03-28" AND upload IS NOT NULL AND download IS NOT NULL AND LOWER(site_id) != 'na' AND site_id IS NOT NULL) AS aa GROUP BY site_id
HAVING productivity =1
если я сделаю запрос
select count(*) from aggregated where circle_id = '102' and district = 'East'
Возвращается 98 строк;
Если я добавлю это условие также с запросом no .1 тогда, когда предложение так окончательно выглядит как
WHERE `date` = "2020-03-28" and `circle_id = '102' and district = 'East' AND download IS NOT NULL AND upload IS NOT NULL AND LOWER(site_id) != 'na' AND site_id IS NOT NULL) AS aa GROUP BY site_id
HAVING productivity =1
, тогда возвращается 101; что правильно ; где я не прав.
Более подробно, если выполнить запрос, как показано ниже
SELECT
`date`,
district,
town,
locality,
vendor,
freq_kind,
bandwidth,
circle_id,
SUM(data_total),
SUM(capacity),
CASE WHEN (SUM(IFNULL(data_total,0))/SUM(IFNULL(capacity,0))) * 100 < 50 THEN 1 ELSE 0 END AS productivity
FROM (
SELECT
circle_id,
`date`,
district,town,locality,vendor,freq_kind,bandwidth,
site_id,
`download`+`upload` AS data_total,
CASE WHEN freq_kind = "2300" AND bandwidth = "20 MHz" THEN 105
WHEN freq_kind = "2300" AND bandwidth = "15 MHz" THEN 80
WHEN freq_kind = "2300" AND bandwidth = "10 MHz" THEN 45
ELSE 0 END AS capacity
FROM websites WHERE `date` = "2020-03-28" and `circle_id = '102' and district = 'East' AND download IS NOT NULL AND upload IS NOT NULL AND LOWER(site_id) != 'na' AND site_id IS NOT NULL) AS aa GROUP BY site_id
HAVING productivity =1
Приведенный выше запрос вернет 101 строку;