Ваш тест для> 0 не обязательно выполняется перед делением. Если у вас есть это в одном и том же состоянии, вы можете использовать CASE, который выполняет дела по порядку. Вы можете переместить коэффициент в HAVING, который оценивается после WHERE.
Среднее значение отношения к имени экрана, имя группы GROUP BY.
SELECT screenname, AVG(followers/friends) AS FFRatio
FROM tweets
WHERE friends > 0
GROUP BY screenname
HAVING FFRatio > 2
(AVG представляет собой совокупность функций и должен появиться в HAVING или SELECT. Другие столбцы в GROUP BY может появиться в SELECT. Если столбец не однозначна на группу, то нет одного значения SELECT. но если столбцы являются однозначными для каждой группы, и вы хотите их выход, то вы можете добавить их в GROUP BY & SELECT.)
нО Возможно, что вы действительно хотите, это люди, у которых нет друзей, но есть последователи или иметь друзей, а также достаточно хорошее соотношение. Для одного отношения к имени экрана вы можете отображать пробел, когда нет отношения и числа, когда есть. Но как средние коэффициенты в этих случаях? - не всегда есть соотношение.
BUT Крайне маловероятно, что среднее значение отношения или среднего значения имеет значение. Например, усреднение 100/4 и 99/99 дает (25 + 1)/2 = 13. Но среднее значение по всем наблюдениям составляет 199/103. Точно так же в вашем случае вы можете иметь наблюдения с последователями, но без друзей, без отношения, но это следует учитывать.
Если вы хотите использовать понятие «недавнее», вы можете использовать AVG (последователей)/AVG (друзей), где значения взяты из некоторого стандартного интервала времени. Возможно, ваш вход - это активность для такого интервала или аппроксимация одного из них. (Вы все еще предполагая равномерное распределение наблюдений по времени.) Если это так:
SELECT screenname, AVG(followers) AS FoAvg, AVG(friends) AS FrAvg,
CASE WHEN FrAvg = 0 THEN ''
ELSE FoAvg/FrAvg END AS FFRatio
FROM tweets
GROUP BY screenname
HAVING CASE WHEN FrAvg = 0 AND FoAvg > 0 THEN 1
WHEN FrAvg > 0 AND FoAvg/FrAvg > 2 THEN 1
ELSE 0 END
Вы должны решить, что вы хотите, чтобы ваш запрос вернуться. Но это крайне маловероятно, чтобы быть средним коэффициентом.
Я удалил посторонние теги базы данных.Добавьте обратно соответствующий тег для используемой базы данных. –
@philipxy Я предположил, что деление на 0 вызовет проблемы – FProlog
Примеры данных и желаемые результаты помогут объяснить проблему. –