Обновить
61
0
Владимир @postgres

Ведущий инженер по внедрению ПО

Отправить сообщение

Да, здорово!
Выходит, что в данном примере не обязательно выводить порядок для string_agg? Чтобы ничего не сдвинулось без принудительной сортировки.

Ага, другое дело, когда не было русификации и стрелочек… Это то, заставляло меня учить английский. Поражать учителей английского отменными знаниями всех частей тела, видов одежды и т.д.
Хотя, если торрент и прочий трафик шифруется, то это все мусор будет…
Даже интересно, какой информации будет больше всего? Фильмы 4к, сериалы и игры с торрентов? Было бы неплохо группировать одинаковые файлы.

Похожие мысли возникали, когда мельком видел фильм «Тихоокеанский рубеж». Мне казалось глупым для битвы в воде использовать человекоподобных роботов… (типа для повтора движений человека, но это глуповато даже для фильма, как мне кажется)


С таким же успехом можно было бы, субмарине приделать 10 вращающихся рук с мечом и пускать в бой..


К чему это мне вспомнилось?
Так вот и тут, зачем 2 ноги и 2 руки? Это скорее ограничение, нежели преимущество..

Киберпанк, который мы заслужили..

Надеюсь на них стоит не пиратская винда, а то будет куда все печальнее..

Несомненно, чем проще решение, тем лучше. Но, название статьи слишком громкое, ожидал прочесть, что-то более удивительное. Спасибо за перевод.
Не прокатила симуляция:)
Спасибо, у Вас потрясающие курсы! Как-то даже обидно, что так не так много (пока что) просмотров, по крайней мере на youtube.
p.s. жду DEV-2
* так тут и не сказано что Россия вылетит в групповом отборе, ровно наоборот…
Вернусь к этой статье в июле — проверить.
Круто, попробую посмотреть что-нибудь о себе.
Ага, раздражает, что мы становимся заложниками уникальности. На популярных сервисах почти всегда всё занято. Приходится регаться как Vasya_24634 имя при этом еще и почту в стиле Vasya15_15@....ru :)
Вспомнил историю с плеером Apple. Из-за жалоб пользователей на такую «случайность», Apple пришлось исправить алгоритм. «Мы сделали его менее случайным, чтобы он казался более случайным» — сказал Стив Джобс.
string_agg() крут, спасибо. Жаль его не было до 9 версии.

Насчет оператора IN. Давно заметил, что его лучше не использовать, если IN (OVER 9000 rows..)
и обычно переписывал на EXISTS или JOIN
SELECT * FROM table1 t1 
WHERE EXISTS (SELECT 1 FROM table2 t2 where t2.id = t1.t2_id)

Спасибо за: "=ANY((SELECT array_agg(id) FROM table2)::integer[])" — интересная особенность.
Можно скормить табличку, или view на 2 столбца этой таблицы. Отпишите как по скорости будет работать.
Простым перебором как-то так, спасибо habrahabr.ru/post/340460/#comment_10497126



SQL
DROP TABLE IF EXISTS My_Values;
CREATE  TABLE My_Values (id,sm) --Создаем таблицу с данными
as ( 
VALUES (1, 45),
(2, 80),
(3 ,75),
(4, 125),
(5, 50),
(6, 70),
(7, 22),
(8, 23),
(9, 47),
(10, 20)
);

DROP TABLE IF EXISTS need_val;
CREATE  TABLE need_val(nv) 
AS SELECT 125; --- УКАЗЫВАЕМ НАШЕ ЧИСЛО
--p.s. Большие числа с мелкими составными будут очень долго вычисляться

WITH RECURSIVE t AS (
	WITH q as (
		SELECT DISTINCT
		 id
		, sm
		FROM My_Values
		WHERE sm <= (SELECT nv FROM need_val) and sm >0
		
	) 
	SELECT id,
	sm,
	sm tsm,
	id::text AS path,
	sm::text AS vals
	FROM q
	UNION ALL
	SELECT 
	q.id AS id,
	q.sm AS sm,
	t.tsm + q.sm AS tsm,
	(t.path || ','::text) || q.id AS path,
	(t.vals || '+'::text) || q.sm AS vals
	FROM t
	JOIN q ON q.id < t.id 
	--where (t.tsm + q.sm) <= (SELECT nv FROM need_val)
	)
SELECT t.path, tsm,'='||t.vals
FROM t
WHERE t.tsm = (SELECT nv FROM need_val)
--LIMIT 10000;

Прикольное решение, с разрешения автора zoroda выкладываю немного доработанный вариант.
Конечно, рекурсивный перебор не эффективный, но результат не так плох как я думал.
Например: нашел все варианты как можно получить число 195 из суммы чисел кратных трем.


SQL побаловаться
DROP TABLE IF EXISTS My_Values;
CREATE  TABLE My_Values (id,sm) --Создаем таблицу с данными
AS (SELECT row_number() over(),* FROM generate_series(0,500,3) ORDER BY 2 DESC );

DROP TABLE IF EXISTS need_val;
CREATE  TABLE need_val(nv) 
AS SELECT 195; --- УКАЗЫВАЕМ НАШЕ ЧИСЛО
--p.s. Большие числа с мелкими составными будут очень долго вычисляться

WITH RECURSIVE t AS (
	WITH q as (
		SELECT DISTINCT
		 id
		, sm
		FROM My_Values
		WHERE sm <= (SELECT nv FROM need_val) and sm >0
		
	) 
	SELECT id,
	sm,
	sm tsm,
	id::text AS path,
	sm::text AS vals
	FROM q
	UNION ALL
	SELECT 
	q.id AS id,
	q.sm AS sm,
	t.tsm + q.sm AS tsm,
	(t.path || ','::text) || q.id AS path,
	(t.vals || '+'::text) || q.sm AS vals
	FROM t
	JOIN q ON q.id < t.id 
	where (t.tsm + q.sm) <= (SELECT nv FROM need_val)
	)
SELECT t.path, tsm,'='||t.vals
FROM t
WHERE t.tsm = (SELECT nv FROM need_val)
--LIMIT 10000;

Как минимум потому, что он полностью бесплатный…
И для тривиальных задач хватает, не все же тут разработчики.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность

Специализация

Инженер по внедрению
Lead
PostgreSQL
SQL
Database
Python
Bash
Linux
Docker
RabbitMQ
Elasticsearch
ELK Stack