Я хочу, чтобы выбрать сообщения от пользователей, которые имеют конкретные последователь что выше, чем в среднем в целом (по сравнению с другими пользователями)MySQL: где отсчет выше среднего
Проблемы, когда я использую AVG()
это ограничивает число сообщений/пользователей, проходящий через, но я не могу использовать GROUP BY j.id
это испортит среднее количество и WHERE j2.fCount >= j2.oAvg
перестает работать должным образом
Вот мой код
SELECT * FROM (
SELECT j.*, ROUND(AVG(j.fCount)) as oAvg
FROM (
SELECT p.id , COUNT(fCount.id) as fCount
FROM `post` p
LEFT JOIN `table` table ON ...
LEFT JOIN `user` user ON ....
LEFT JOIN `follow` fCount ON fCount.user_id=user.id AND fCount.follow_id=table.ids
WHERE p.user_id=fCount.user_id
group by p.id
) j
---- > `GROUP BY j.id` - BREAKS THE AVERAGE BELOW
) j2
WHERE j2.fCount >= j2.oAvg
Спасибо :)
Спасибо, но есть более эффективный способ сделать это? вместо того, чтобы считать его дважды – user6227254
Я не думаю, что есть способ ... но я могу ошибаться –
Я думаю, если бы вы действительно хотели, чтобы вы могли создать процедуру хранения, которая создает вашу таблицу j как временную таблицу. затем выполните запрос в этой таблице j, а затем, когда процесс хранилища будет завершен, вы можете его удалить. я не знаю, как еще вы можете это сделать, не запрашивая эту внутреннюю таблицу дважды –