Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Медиана, боян?  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7071
Подскажите запрос. Есть табличка с цифрами 1,2,3,4,5,6,7,8,9,10,11,12. Нужно по медиане выдать соседей, 3 слева, 3 справа. Медиана, к примеру 7, результат 4,5,6,7,8,9,10. И второй запрос, от медианы нужно выбрать соседей, сумма чиcел которых не превышала определенного значения, например 20, результат, 5,6,7,8.

SQL 2017.
23 май 19, 18:46    [21892398]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2400
Relic Hunter,

row_number() between row_number()/2 - 3 and row_number()/2 + 3
23 май 19, 19:47    [21892458]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7071
WarAnt,

это завернутый селект да еще и с юнион? такое себе.
23 май 19, 20:02    [21892471]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36462
Relic Hunter
WarAnt,

это завернутый селект да еще и с юнион? такое себе.
Огласите криерии вашего фен-шуя.
23 май 19, 20:04    [21892473]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7071
Гавриленко Сергей Алексеевич
Relic Hunter
WarAnt,

это завернутый селект да еще и с юнион? такое себе.
Огласите криерии вашего фен-шуя.
публикуйте, феншуй подождет.
23 май 19, 20:24    [21892482]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6613
Relic Hunter,

Sql давно медиану так считает
23 май 19, 20:47    [21892496]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
vikkiv
Member

Откуда: London
Сообщений: 2469
для навигации в пространстве набора для median - без сортировки/order и счёта/count не обойтись,
отдельное дело - что другие решения под этот вопрос более оптимизированы,
для Intel процессоров есть специальные Си-шные библиотеки (MKL) отлично заточенные
именно расчёты задач векторной/линейной алгебры, можешь при желании написать Assemby
(не говоря даже о специализированных под это дело процессорах с оптимизированной архитектурой/набором команд)

частью той-же SQL Server экосистемы является Machine Learning Services (R или Python)..
в общем если вдруг количество такого рода задач довольно большое (в общеей доле от SQL расчётов)
- то можно попробовать перенаправить нагрузку туда (R например), и сравнить результаты по производительности
23 май 19, 21:04    [21892503]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7071
А что по второму запросу? Активнее товарищи.
Relic Hunter
И второй запрос, от медианы нужно выбрать соседей, сумма чиcел которых не превышала определенного значения, например 20, результат, 5,6,7,8.

SQL 2017.
23 май 19, 22:13    [21892523]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
vikkiv
Member

Откуда: London
Сообщений: 2469
Relic Hunter,

там целая сеть проверок в алгоритме,
если нечётное то в середине может быть число >20 изначально
затем в сумме с одной стороной давать >20 а с другой всё ещё <20 ,
т.е. нужно пошагово проверять оба конца (кстати в задаче не говорится как выбирать соседей,
можно и сначала один хвост во всю глубину до нужного максимума,
а потом если кончилось то в другой, или по равноудалённости, что логичнее)

если count() чётное - то опять разветление сценариев / возможных исходов: (схожее с предыдущим) с лева <=20 с права >20,
т.е. при наборе до константы-ограничения нужно проверять в какой-то приоритетности
(если любое: слева/справа <=20 и любое второе уже >20)
{брать меньшее если сумма >20}, если сумма <=20 то оба..
в общем пошагово уходить в глубину через iterations (можно с maxrecursion)

в общем действительно боль по производительности..
23 май 19, 22:30    [21892533]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
iap
Member

Откуда: Москва
Сообщений: 46862

Ссылка на позицию в клипе: https://youtu.be/58f-QJPKawU?t=3165s
23 май 19, 22:44    [21892541]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
vikkiv
Member

Откуда: London
Сообщений: 2469
iap,

там нет вероятностей/неопределённостей
(ну может только какой хвост проверять первым: левый/правый),
только жестко прописанные правила, по факту дерево решений.
23 май 19, 22:49    [21892544]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
iap
Member

Откуда: Москва
Сообщений: 46862
vikkiv
iap,

там нет вероятностей/неопределённостей
(ну может только какой хвост проверять первым: левый/правый),
только жестко прописанные правила, по факту дерево решений.
Что? Вы посмотрели?
Метод с ранжированием переделывается для вас на раз-два.
Причём здесь вообще вероятность или неопределённость?
24 май 19, 09:14    [21892691]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
court
Member

Откуда:
Сообщений: 1805
Relic Hunter
Нужно по медиане выдать соседей, 3 слева, 3 справа.

declare @t table (v float)
insert into @t values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)--,(13)

--
declare @cnt int=3;

select top (2*@cnt) with ties
	v
	--,abs((count(*)over()+1)/2.0 - row_number()over(order by v)) 
from @t 
order by abs((count(*)over()+1)/2.0 - row_number()over(order by v))
24 май 19, 10:12    [21892789]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7071
court,

запрос хорош, но какое отношение это имеет к вопросу?
24 май 19, 18:20    [21893399]     Ответить | Цитировать Сообщить модератору
 Re: Медиана, боян?  [new]
court
Member

Откуда:
Сообщений: 1805
Relic Hunter
court,

запрос хорош, но какое отношение это имеет к вопросу?
эээ ...
Relic Hunter
Нужно по медиане выдать соседей, 3 слева, 3 справа.

Это твои слова ?
Вот запрос именно это и делает.
Несогласен ?
27 май 19, 10:05    [21894457]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить