У меня есть следующая таблица:
clientId | value | date |
1 | 2| Jan 1|
1 | 3| Jan 2|
1 | 4| Jan 5|
2 | 1| Jan 1|
2 | 2| Jan 2|
2 | 7| Jan 6|
Я хочу удалить строки, где значение ниже 25-го процентиля всех значений для каждого клиента и выше 75-го процентиля. Затем я хочу усреднить значения, которые остаются. Моя идея состояла в том, чтобы объединить строки значений вместе в порядке возрастания, а затем использовать SUBSTRING_INDEX для удаления значений выше или ниже пороговых значений, рассчитанных с использованием COUNT (*):
SUBSTRING_INDEX(SUBSTRING_INDEX(
GROUP_CONCAT(`transactionCount` ORDER BY
`transactionCount` SEPARATOR ','), ',', -(75 / 100 * COUNT(*))),
',', ROUND(75 / 100 * COUNT(*) -1)) AS sub2
. В этот момент я получаю конкатенированная строка без значений, которые я не хочу. Моим следующим шагом будет усреднение оставшихся значений, но я не могу этого сделать, потому что все значения теперь находятся в строке.
Есть ли способ усреднить значения в строке в том же запросе sql?
Является ли это совершенно ненужным способом избавления от значений ниже 25-го и выше 75-го процентиля всех значений? Есть ли способ сделать это лучше? Я предполагаю, что должен быть способ установить предложение HAVING, которое может вычислять процентили и удалять значения ниже или выше их, верно? Что-то вроде: HAVING value> = 25thPercentileOfValues AND value <= 75thPercentileOfValues. Но как бы я измерил эти два значения: (</p>
Любая помощь будет принята с благодарностью, спасибо, ребята: D