Моё меню Общее меню Сообщество Правила форума Все прочитано
Вернуться   uForum.uz > ИКТ и телеком > Разное/IT
Сообщения за день Поиск
Знаете ли Вы, что ...
...до того как открыть новую тему, стоит использовать поиск: такая тема уже может существовать.
<< Предыдущий совет - Случайный совет - Следующий совет >>

Разное/IT Всё, что не попадает в другие разделы форума и подфорумов представленных здесь организаций. Не IT темы обсуждаются в "Беседке"


 
 
Опции темы Опции просмотра
Старый 17.10.2013 14:04   #18  
Real ID Group
Аватар для Rooslan Khayrov
Оффлайн
Google
software engineer
AKA:Y combinator
Сообщений: 418
+ 114  374/183
– 6  9/8

Switzerland
Продолжаем развлекаться?

В процессе одного обсуждения родилась пара задачек. Самый редуцированный вариант: для заданной таблицы посчитать некую агрегатную функцию для каждых N строк. Для наглядности примем простейшую схему с двумя колонками: id (целое автоинкремент) и value (вещественное). Надо посчитать суммы value по 10 значений: т.е. сумма первых 10, с 11-го по 20-е и т.д.

Связанная задача с большим реальным смыслом: для той же таблицы найти перцентили распределения value, с 1-й по 100-ю.

Решения для PostgreSQL:
Скрытый текст:
Код:
SELECT sum(value) FROM (
    SELECT value, row_number() OVER (ORDER BY id) AS i
    FROM data ORDER BY id) AS numbered
GROUP BY (i - 1) / 10;

SELECT ceil(percent) AS n, max(value) AS percentile FROM (
    SELECT value, 100.0 * row_number() OVER (ORDER BY value) / count(id) OVER () AS percent
    FROM data) AS sub
GROUP BY n ORDER BY n;
Ответить 
 




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Advertisement System V2.5 By Branden
OOO «Единый интегратор UZINFOCOM»


Новые 24 часа Кто на форуме Новички Поиск Кабинет Все прочитано Вверх