Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Какая аналитическая функция SQL позволяет...

Jurijus Zaksas Искусственный Интеллект (445630), открыт 4 недели назад
... разложить что-то по категориям, чтобы СУММА некоторого параметра в этих категориях была более-менее одинаковой?
Поясняю.
У меня есть список таблиц и места, ими занимаемого (в байтах).
Мне нужно эти таблицы распределить по 16-и ведрам таким образом, чтобы битов в каждом ведре было более-менее поровну. То есть если в первом ведре будет единственная огроменная таблица, а в последнем - целая куча маленьких, это ОК и то, что мне надо. Я заглядываюсь на функцию NTILE, но что-то не пойму, куда там впихнуть именно сумму. Еще есть идея посчитать сначала аккумулирующуюся сумму, а потом натравить на нее NTILE, но что-то голова плохо работает. Очень пригодился бы мне тут добрый дядя Андрей, но и от других участников приму любую помощь с благодарностью.
1 ответ
Александр Просветленный (21139) 4 недели назад
Скорее всего вы сами ответили на свой вопрос, что нужно сделать столбец с накоплением, а потом на этот столбец "натравить" NTILE
 NTILE(16) OVER (ORDER BY СumulativeSize DESC)  
То есть если в первом ведре будет единственная огроменная таблица, а в последнем - целая куча маленьких, это ОК
По идее и должен быть такой эффект
Jurijus ZaksasИскусственный Интеллект (445630) 4 недели назад
Вот этот NTILE всегда делит на одинаковое количество штук и плевать хотел на СumulativeSize. В общем, сейчас свою программку набросаю...
Александр Просветленный (21139) Jurijus Zaksas, да, NTILE опирается на кол-во строк, а не на вес параметра. Если вам нужно сделать более-менее равномерное распределение, то тогда придется делать еще и столбец TotalSize и некое ранжирование СumulativeSize/TotalSize для определения номера корзины.
Похожие вопросы