Набор данных базы данных MySQL со значениями, максимально приближенными к числу «x» - PullRequest
2 голосов
/ 28 февраля 2012

Я пытаюсь получить набор результатов, который содержит 10 значений, наиболее близких, в данном случае, к числу 3.

У меня есть база данных, в которой есть значения в столбце с рейтингом, который может быть 1, 2,3,4 или 5. То, что я пытаюсь сделать, это запросить базу данных и вернуть первые 10 строк, которые имеют значения, самые близкие к 3. Значения могут быть выше 3 или ниже 3. Я должен отметить, что эти значения вНоминальный столбец - это число с плавающей точкой.

Затем мне нужно отсортировать эти строки по порядку так, чтобы сначала были строки со значением 3, а затем строка с наименьшим смещением (+/-) из 3.

Есть ли какой-либо SQL-запрос, который может вернуть хотя бы результирующий набор значений, ближайший к 3?или мне придется вернуть всю БД и отсортировать ее самому?

Чтобы получить первые 10 строк с наибольшим значением, я использовал выражение

SELECT * FROM tabs ORDER BY 5 DESC LIMIT 10";

5, относящееся к столбцус рейтингом

Есть ли способ изменить это, чтобы сделать то, что я хочу?Спасибо

Ответы [ 3 ]

1 голос
/ 28 февраля 2012

Если я правильно понимаю вашу проблему, это должно сработать:

select *
from tabs
order by abs(`rated` - 3) asc
limit 10

Обратите внимание, что она сортируется по разнице в порядке по возрастанию , поэтому те с разницей 0 будутприезжай первым.

0 голосов
/ 28 февраля 2012

Если я правильно понял, что вам нужно попробовать:

select * 
from (
  select 
    case when -(3-rated) > 0 then -(3-rated) else (3-rated) end as distance, 
    tabs.*
  from tabs
) subsel 
order by distance 
limit 10
0 голосов
/ 28 февраля 2012
SELECT * FROM tabs ORDER BY ABS(3 - Rate) ASC LIMIT 10
...