Имеется запрос вида:
SELECT
measuring.pin_name AS pin_name,
AVG(measuring.meas) AS meas,
COUNT(measuring.meas) AS counts
FROM
measuring,
list_ims,
test_name,
test_variant,
party_ims
WHERE
(
measuring.id_test_variant = test_variant.id AND test_variant.id_test_name = test_name.id
) AND(
measuring.id_party = party_ims.id AND party_ims.id = list_ims.id
) AND list_ims.name = '1533ИР39' AND test_name.name = 'Выходное напряжение высокого уровня UOH, В'
GROUP BY
`pin_name`
ORDER BY
`measuring`.`pin_name` ASC
На выходе возвращается список вида
pin_name 1 | среднее | количество сущностей с pin_name 1
pin_name 2 | среднее | количество сущностей с pin_name 2
pin_name 3 | среднее | количество сущностей с pin_name 3
В последствии средствами python считается количество pin_name, после этого среднее каждой сущности сравнивается с пользовательским числом и проверяется если новое количество pin_name осталось прежним, то всё круто, добавляю головной элемент (тот, у кого были все эти pin_name в массив на вывод пользователю), но при этом надо также посчитать количество pin_name у которых значение (уже не среднее) больше/меньше пользовательского значения.
Сейчас делаю это через два запроса.
Есть ли вариант ещё в исходном считать это сразу?
То есть, к примеру пользователь ввёл <=5.0
На выходе запроса получить:
pin_name 1 | среднее | количество сущностей с pin_name 1 <=5.0 | true или false
pin_name 2 | среднее | количество сущностей с pin_name 2 <=5.0 | true или false
Где true - среднее <=5.0, false - обратное.
В более общем случае, для различных СУБД подобное пишут с использованием оператора case и агрегатной функции суммирования:
select sum(case when meas < 5 then 1 else 0 end)
Для диалекта mysql можно более кратко записать как
select sum(IF(meas < 5, 1, 0))
И поскольку у нас тут либо 0 либо 1, то и вовсе сократить до
select sum( meas < 5)
Схожим образом можно оформить и решение для последнего вашего столбца
select ( avg(meas) < 5 ) as truefalse
Так что ваш запрос дополнится такими строками
SELECT
measuring.pin_name AS pin_name,
AVG(measuring.meas) AS meas,
COUNT(measuring.meas) AS counts,
SUM(measuring.meas < 5) as c_lt5,
(AVG(measuring.meas) < 5) as truefalse
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости