@Befroman

Как узнать самое частое значение по формуле (value*frequency)?

Есть таблица table в которой два столбца - value и frequency. В ней могут быть такие записи:
Value, frequency
1,1
1,1
1,1
1,1
1,1
1,1
1,1
1,1
1,1
2,100
3,1000
4,300
4,300
Нужно выбрать самое часто возникающее value учитывая frequency. Frequency в этом плане как множитель частоты возникновения значения. Например, в примере выше, если посчитать, самое частое значение value по формуле будет 3(3*1000=3000 выше других значений). Это идея, а вот как имплеминтировать мне не ясно. Я пробовал функцию AVG() но она ясное дело считает количество записей, ей на frequency всё равно, а также такой запрос:
SELECT SUM(value * frequency * 1.0) / SUM (value) FROM table;

Он ближе к идее, но тут проблема другая: он даёт среднее значение, а это не то. CEIL/ROUND/FLOOR не помогают. Пытался гуглить, но ничего не находил. Какое может быть решение?
  • Вопрос задан
  • 475 просмотров
Решения вопроса 1
@Befroman Автор вопроса
Получилось сделать такой запрос:
SELECT value FROM table GROUP BY value ORDER BY SUM(frequency) DESC LIMIT 1
Всем спасибо!
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
0xD34F
@0xD34F
SELECT value, SUM(value * frequency) AS value_sum
FROM table
GROUP BY value
ORDER BY value_sum DESC
LIMIT 1
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Value (V) - это тип оружия, как я понял.
Frequency (F) - это частота использования конкретного оружия (V).
Если сумма всех Frequency (TotalF) - это 100%.

Тогда:
F*100/TotalF - будет процент использования конкретного оружия (V).
Значит нужно сортировать именно по этому параметру.

Частота F - это использование любого типа оружия.
Нужно также, посчитать количество использования всех типов оружия и каждого типа по отдельности. Повторяющиеся типы оружия (V) - унифицировать, чтобы не было 1,1,1, а было только 1,2,3 (и т.д.) и их суммарное количество (TotalV).
И по той же формуле (TotalV - это суммарное количество уникальных Value таблицы):
V*100/TotalV - будет процент использования конкретного типа оружия (V).

Если таблица верна, то будет выполняться условие:
F*100/TotalF = V*100/TotalV

Т.е. можно брать любую формулу и по ней вывести список частот по используемому типу оружия. Отсортировав его, можно узнать самое часто используемое и самое редко используемое...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы