我遵循Generate a random number of non duplicated random number in [0, 1001] through a loop的幫助。若要使用「分組方式」一次更新多個非重複行,請執行以下操作:
但我不能適用於我的情況。當我這樣做:
update weighed_directed_edge set endpoint= trunc(1000 * random()+ 1)
from generate_series(1,10) group by 1 where startpoint= from_point;
更新的EndpointId它抱怨:
ERROR: syntax error at or near "group"
LINE 1: ...nc(1000 * random()+ 1) from generate_series(1,10) group by 1.
我也試過:
insert into weighed_directed_edge (startpoint,endpoint)
values (from_point, trunc((1000 * random()+ 1))
FROM generate_series(1, directed2number)
GROUP BY 1 ;
insert into weighed_directed_edge (startpoint, endpoint, costs)
select 1, trunc(1000 * random()+ 1) from generate_series(1,10) group by 1,1;
不工作。我需要從另一個表中設置的相同點中選擇起點和終點,以填充weighed_directed_edge
表。
cross_point table:有1001個十字路口。
Table "public.cross_point" Column | Type | Modifiers --------------+---------+--------------------------------------------------------------------- intersection | integer | not null default nextval ('intersection_intersection_seq'::regclass) x_axis | integer | not null y_axis | integer | not null Indexes: "intersection_pkey" PRIMARY KEY, btree (intersection) "intersection_x_axis_key" UNIQUE, btree (x_axis, y_axis)
weighed_directed_edge表:
Table "public.weighed_directed_edge" Column | Type | Modifiers ------------+------------------+----------- startpoint | integer | endpoint | integer | costs | double precision | Indexes: "weighed_directed_edge_startpoint_key" UNIQUE, btree (startpoint, endpoint) Foreign-key constraints: "weighed_directed_edge_endpoint_fkey" FOREIGN KEY (endpoint) REFERENCES cross_point(intersection) "weighed_directed_edge_startpoint_fkey" FOREIGN KEY (startpoint) REFERENCES cross_point(intersection)
的隨機數端點(從1001點列隨機得到)對應於每一個起始點(從柱依次點獲得),. 終點的數量在[1,7]。
- 成本將基於起點和終點之間的距離。
要求:
起始點和終點的組合應該是唯一的。
Startpoints集包含從表cross_point所有1001相交
端點來全部來自同一交叉點集。
每個星點最多有7個端點匹配,(7路道路交叉點最大),並且隨機選擇端點匹配數量。
我跳過下面的代碼成本計算:
--The largest number of intersection chosen is 7, but this could be altered
create or replace function popluate_weighed_directed_edge() returns void as $$
declare
from_point integer;
to_point integer;
directed2number integer; --the number of node this startpoint leads to
counter integer;
factor float;
weight numeric;
start_pointer record;
begin
for start_pointer in select * from cross_point
loop
from_point := start_pointer.intersection;
directed2number := trunc(Random()*7+1);
counter := directed2number;
while counter > 0
loop
insert into weighed_directed_edge (startpoint) select from_point from generate_series(1,10) ;
update weighed_directed_edge set endpoint= trunc(1000 * random()+ 1) from generate_series(1,10) group by 1 where startpoint= from_point ;
update weighed_directed_edge set costs= trunc(1000 * random()+ 1) from generate_series(1,10) group by 1 where startpoint= from_point ;
counter := counter - 1;
end loop;
end loop;
end
$$ language plpgsql;
究竟是什麼問題? – wildplasser
我還沒有看到明確的措辭問題。你談論'points',但那些可能是'整數'值。我們只是不知道 - 表weighed_directed_edge的定義丟失了。你可以使用短語,例如'覆蓋範圍在[1,1001] .'中的所有點,不能用英語解析...... –
我已經重新調整了它。 –