@fatedupi

Как отсортировать строки в mysql по среднему значению?

Всем привет! Есть табличка типа такой:
[--order--]
1
2
3
4
5
6

Подскажите, пожалуйста, есть-ли в mysql какая-нибудь хитрость что-бы получить данные из этой таблицы отсортированные по среднему значению?
То есть в начале выборки должны быть записи, расположенные наиболее близко к середине.
В данном случае хотелось-бы видеть что-то типа:

3,2,4,1,5,6

Спасибо!
  • Вопрос задан
  • 340 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Dronablo
Oracle performance geek
Мускуля под рукой нет, код под Oracle, но идея, думаю, понятна:
with inp as (
select 1 id from dual union all
select 2 from dual union all
select 3 from dual union all
select 4 from dual union all
select 5 from dual union all
select 6 from dual)

SELECT
    id
FROM
    inp
ORDER BY
    abs( (
        SELECT
            AVG(id)
        FROM
            inp
    ) - id),
    id;
Ответ написан
Комментировать
Fragster
@Fragster
помогло? отметь решением!
select 
  table.col,  
  subquery.avg,
  ABS(table.col - subquery.avg) as diff
from table,
  (select AVG(table.col) as avg from table) as subquery
order by
  diff
Ответ написан
Комментировать
kawabanga
@kawabanga
Добавьте левым джоином необходимые данные для формирования поля сортировки (среднее значение), и рассчитайте поле для сортировки.

Имейте в виду, что это будет медленно.

select *, (abs(avg_column-column)) as sorting_column from orders i 
left join (select avg(column) as avg_column from orders) o on...
order by sorting_column

Как то так, только на джоином надо подумать.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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