我需要一些关于以下postgres功能的帮助
我有下表和列:
array, array_length
我最初在中有几个数组,然后运行一个查询(实际上是一组3个查询),选择数组,附加它们,然后将附加的数组插入表中。
我需要循环这个插入查询,直到其中一个数组(select max(array_length)from table
)达到预定义的大小,比如长度50。
我基本上需要写一些
begin
for (select max(array_length) from table)<50
loop
(drop table if exists super_item_temp;
ALTER TABLE super_item
RENAME TO super_item_temp;
create table super_item as
select distinct * from super_item_temp;
insert into super_item
select ...calculations... from super_item)
end
但是我找不到正确的语法来写这个
我http://www.postgresql.org/docs/8.4/static/plpgsql-control-structures.html看了手册,但找不到任何有用的东西。
任何提示或链接指向我正确的方向将不胜感激!谢谢你。
编辑:我试过了
创建或替换函数函数_name()将int4返回为“声明r记录”;
开始时(从super_item中选择最大(array_length))
loop
drop table if exists super_item_temp;
ALTER TABLE super_item
RENAME TO super_item_temp;
create table super_item as
select distinct * from super_item_temp;
insert into super_item
select old_array,
array_sort_unique( array_agg(added_item) || a.old_array) as new_array,
array_length(array_sort_unique( array_agg(added_item) || a.old_array),1)
from (
select
a.new_array as old_array,
case when string_to_array(b.item2::text, ",")::int[] <@ a.new_array and string_to_array(b.item1::text, ",")::int[] <@ a.new_array then null
when string_to_array(b.item2::text, ",")::int[] <@ a.new_array then b.item1 else b.item2 end as added_item
from
super_item a
left join pairs b
on string_to_array(b.item1::text, ",")::int[] <@ a.new_array or string_to_array(b.item2::text, ",")::int[] <@ a.new_array /**any item from pair is in array**/
where 1=1
group by a.new_array, 2
having sum(b.count)>10
and sum(b.offset)<=0
and
case
when string_to_array(b.item2::text, ",")::int[] <@ a.new_array and string_to_array(b.item1::text, ",")::int[] <@ a.new_array then null
when string_to_array(b.item2::text, ",")::int[] <@ a.new_array then b.item1 else b.item2 end is not null
/**new item is not null**/
order by 2 desc
)a
group by 1;
END LOOP;
返回1; END;'LANGUAGE plpgsql;
选择function_name()作为输出;
现在我得到一个函数参数的错误“unknown column”,它应该是一个带引号的分隔符。
错误:列“existiert nicht第18行:在字符串到数组(b.item1::text,”,“”::int[]
试试这个,在我的电脑上它编译得很好(但我不知道它是否能按预期工作)。
CREATE OR REPLACE FUNCTION append_super_item ()
RETURNS integer AS $length$
declare
length integer;
BEGIN
WHILE (select max(array_length) from super_item)<50
LOOP
drop table if exists super_item_temp;
ALTER TABLE super_item
RENAME TO super_item_temp;
Create table super_item as
select distinct * from super_item_temp;
insert into super_item
select old_array,
array_sort_unique( array_agg(added_item) || a.old_array) as new_array,
array_length(array_sort_unique( array_agg(added_item) || a.old_array),1)
from (
select
a.new_array as old_array,
case when string_to_array(b.item2::text, ",")::int[] <@ a.new_array and string_to_array(b.item1::text, ",")::int[] <@ a.new_array then null
when string_to_array(b.item2::text, ",")::int[] <@ a.new_array then b.item1 else b.item2 end as added_item
from
super_item a
left join pairs b
on string_to_array(b.item1::text, ",")::int[] <@ a.new_array or string_to_array(b.item2::text, ",")::int[] <@ a.new_array /**any item from pair is in array**/
where 1=1
group by a.new_array, 2
having sum(b.count)>10
and sum(b.offset)<=0
and
case
when string_to_array(b.item2::text, ",")::int[] <@ a.new_array and string_to_array(b.item1::text, ",")::int[] <@ a.new_array then null
when string_to_array(b.item2::text, ",")::int[] <@ a.new_array then b.item1 else b.item2 end is not null
/**new item is not null**/
order by 2 desc
)a
group by 1;
end loop;
end $length$ LANGUAGE plpgsql;
问题内容: 我有一个需要处理的大型numpy数组,以便在满足条件的情况下将每个元素更改为1或0(稍后将用作像素遮罩)。数组中大约有800万个元素,而我当前的方法对于简化流程花费的时间太长: 是否有一个numpy函数可以加快速度? 问题答案: 您可以使用以下方法来缩短它:
如果输入的len()少于10个字符,则调用子函数“tester”的默认值“太短”。 我下面的代码在一定程度上有效。我需要帮助,这样用户可以一次又一次地输入,直到他们键入'quit',在该命令终止时,终端中没有给出任何输出。传接球不起作用,我不知道该在哪里Rest。 我尝试了一段时间,真的,有回报,但我不能再跟随了。
问题内容: 我想要一种改进我的sql代码的好方法,当条件满足时,我必须使用内部联接。我目前正在复制代码: 我想以这种方式做到这一点: 编辑: 解决方案(由于@Damien_The_Unbeliever): 问题答案: 这应该(大约)执行相同的操作: 当然,这还意味着必须编写对其中的列的任何其他引用,以期望此类列为。
我有一个dict1,我想从中删除为空的所有项目,这不仅意味着属性,而且意味着整个字典。 输出应如下所示: 注意:字典中可以有 N 个项目和/或同一字典中的 N 个键值对。此外,字典中可能有 N 个具有空值的 ,因此必须删除所有 b。
我试图用Python做一个简单的计算器。 我希望用户写“and”,然后while循环应该结束。当我运行它并输入随机文本时,while循环工作并显示“重试”。然而,当我实际输入正确答案(“add”)时,while循环并没有结束——相反,它一直在说“再试一次”。 为什么会这样?我的代码怎么了?
问题内容: 使用函数生成汉明距离t内的所有位序列: 我想退出递归函数,并在发生某种情况时返回调用方函数(如果确实如此)。因此,就像我的递归功能正在听到可能告诉她退出的声音一样! 它仅在 打印后发生,这里: 如何做到这一点(停止展开递归并返回到函数调用者)? 尝试: 似乎只是阻止执行,而且永远不会结束! PS-我也有兴趣 旧的方法论。 问题答案: 要以最简单的形式显示,您可以执行以下操作: 然后,您