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
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 23:00
5000 руб./за проект
19 апр. 2024, в 20:43
20000 руб./за проект