Taras_Serevann
@Taras_Serevann
веб-разработчик, автор

Как найти строку, длинна которой максимально близка нужной?

Здравствуйте!

Допустим, есть след. таблица:
| id | word | length |

И мне нужно извлечь word c length 5. Но если word с таким значением length нет, то нужно с максимально близким к length значением, например, 4 или 6 и так далее.

Если это реально сделать на SQL, то как?
  • Вопрос задан
  • 330 просмотров
Решения вопроса 1
@d-stream
Готовые решения - не подаю, но...
Гм...

abs(length-5) - величина отклонения от искомого
соответственно нам надо найти позицию с самым маленьким отклонением
вот и сортируем позиции по возрастанию отклонения
и берем первую
select top 1 
id, word, length 
from words 
order by abs(length - 5) asceding

написал top 1 в более привычном mssql в MySQL - видимо limit
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
SELECT word
FROM (
  SELECT word, (ABS(elngth)-5) AS lengthDiff
  FROM word
)
ORDER BY lengthDiff ASC
LIMIT 1

как-то так же.
Ответ написан
HectorPrima
@HectorPrima
программист
В SQL не силен но так будет работать :)
SELECT TOP 1 T.*
FROM (
	SELECT T.word,
		T.length
	FROM (
		SELECT TOP 1 *
		FROM Table T
		WHERE T.length >= 5
		ORDER BY T.length
		) T
	
	UNION ALL
	
	SELECT T.word,
		T.length
	FROM (
		SELECT TOP 1 *
		FROM Table T
		WHERE T.length <= 5
		ORDER BY T.length DESC
		) T
	) T
ORDER BY T.length
Ответ написан
Комментировать
Falseclock
@Falseclock
решаю нестандартные задачи
Что за мания у пользователей mySQL все делать через подзапросы?

ведь полно инструментариев, тот же самый CASE
Ответ написан
Ваш ответ на вопрос

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

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