powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Задачка на нахождение суммы чисел
5 сообщений из 5, страница 1 из 1
Задачка на нахождение суммы чисел
    #39791845
nexxie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все добрый день!
Не могли бы вы помочь в написании запроса на PostgreSQL. Задача такая:
"Необходимо вывести сумму всех чисел в последовательности от 0 до 1000 кратные 3м."
Как это написать на Java я понимаю. Но с PostgreSQL чет не могу понять в синтаксисе. Я шерстил форум и понял, что самый правильный вариант был бы через создание временной таблицы. Помогите, пожалуйста с синтаксисом.
...
Рейтинг: 0 / 0
Задачка на нахождение суммы чисел
    #39791879
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nexxie,

см. функцию generate_series, с помощью которой можно нужную последовательность сгенерировать.
...
Рейтинг: 0 / 0
Задачка на нахождение суммы чисел
    #39792172
nexxie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexius,

Решил сам. Через Recursive(работает в 2 раза быстрее чем через sum(generate_series) from generate_series(0,1000,3))

WITH RECURSIVE t(n) AS (
VALUES(1)
UNION ALL
SELECT n+1 FROM t WHERE n < 1000
)

SELECT sum(n) FROM t WHERE n % 3 = 0;
...
Рейтинг: 0 / 0
Задачка на нахождение суммы чисел
    #39792196
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nexxieAlexius,

Решил сам. Через Recursive(работает в 2 раза быстрее чем через sum(generate_series) from generate_series(0,1000,3))


Код: sql
1.
2.
3.
4.
5.
6.
select sum(generate_series::int) from generate_series(0,1000,3)
----------------
"Aggregate  (cost=12.50..12.51 rows=1 width=8) (actual time=0.080..0.080 rows=1 loops=1)"
"  ->  Function Scan on generate_series  (cost=0.00..10.00 rows=1000 width=4) (actual time=0.030..0.046 rows=334 loops=1)"
"Planning time: 0.028 ms"
"Execution time: 0.098 ms"



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
WITH RECURSIVE t(n) AS (
VALUES(1)
UNION ALL
SELECT n+1 FROM t WHERE n+1 < 1000
)

SELECT sum(n) FROM t WHERE n % 3 = 0; 
-----------------------
"Aggregate  (cost=3.98..3.99 rows=1 width=8) (actual time=0.851..0.851 rows=1 loops=1)"
"  CTE t"
"    ->  Recursive Union  (cost=0.00..3.21 rows=31 width=4) (actual time=0.001..0.533 rows=999 loops=1)"
"          ->  Result  (cost=0.00..0.01 rows=1 width=4) (actual time=0.000..0.001 rows=1 loops=1)"
"          ->  WorkTable Scan on t t_1  (cost=0.00..0.26 rows=3 width=4) (actual time=0.000..0.000 rows=1 loops=999)"
"                Filter: ((n + 1) < 1000)"
"                Rows Removed by Filter: 0"
"  ->  CTE Scan on t  (cost=0.00..0.78 rows=1 width=4) (actual time=0.010..0.828 rows=333 loops=1)"
"        Filter: ((n % 3) = 0)"
"        Rows Removed by Filter: 666"
"Planning time: 0.062 ms"
"Execution time: 0.894 ms"



"USE integer,Luke"
...
Рейтинг: 0 / 0
Задачка на нахождение суммы чисел
    #39792328
vsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vsl
Гость
nexxieНе могли бы вы помочь в написании запроса на PostgreSQL. Задача такая:
"Необходимо вывести сумму всех чисел в последовательности от 0 до 1000 кратные 3м."
Как это написать на Java я понимаю. Но с PostgreSQL чет не могу понять в синтаксисе. Я шерстил форум и понял, что самый правильный вариант был бы через создание временной таблицы. Помогите, пожалуйста с синтаксисом.

Код: sql
1.
select (0 + 3*((1000+3)/3 - 1))   *   ((1000+3)/3)   /   2;



Для такой постановки задачи шерстить стоило не только форум, но и учебники по математике :) Сумма арифметической прогрессии же.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Задачка на нахождение суммы чисел
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]