Postgresql Postgres:查询结果不符合预期?
我以前用C和VB写过,但这是我第一次使用Prostgres。我已经为我的申请工作了大约一个月,但遇到了一个困扰我大约一周的问题 我在一个名为xyzfloats的表中有大约7000行。每行包含3个浮点(x浮点、y浮点、z浮点)(以米为单位的点云表示))在最终版本中将有大约26亿行,因此我尝试使用子集来节省时间 我的另一个表xyztable4包含24000000行。每行为: xcell int,ycell int,points int,总浮点 前两个整数包含一个x,y索引。我通过使用带有交叉连接的generate_系列创建了它Postgresql Postgres:查询结果不符合预期?,postgresql,subquery,point-clouds,Postgresql,Subquery,Point Clouds,我以前用C和VB写过,但这是我第一次使用Prostgres。我已经为我的申请工作了大约一个月,但遇到了一个困扰我大约一周的问题 我在一个名为xyzfloats的表中有大约7000行。每行包含3个浮点(x浮点、y浮点、z浮点)(以米为单位的点云表示))在最终版本中将有大约26亿行,因此我尝试使用子集来节省时间 我的另一个表xyztable4包含24000000行。每行为: xcell int,ycell int,points int,总浮点 前两个整数包含一个x,y索引。我通过使用带有交叉连接的g
create table xyztable4(
xcell int,
ycell int,
points int default 0,
total float default 0
)
insert into xyztable4 (xcell, ycell)
select from generate_series(-1000,6000) as xcell cross join generate_series(-40,3360) as ycell;
计划是将浮动台中的每个x,y放置在一个边长为0.05米的小正方形中
确定x和y的正确平方后,z将添加到“总计”列中,“点数”列将递增
代码如下:
with subquery as (
select x,y,z
from xyzfloats)
update xyztable4
set
points=points+1,
total = total + subquery.z
from subquery
where xcell= floor(subquery.x/0.05) and ycell = floor(subquery.y/0.05)
我尝试使用cast,但索引在负面方面是错误的
请给出正确的结果
问题是我只处理了234行,而不是7000行
我认为这可能是数字精度的问题,也就是说可能有一些训练数字表示它不完全是整数。我认为postgres使用的是整数除法,比如C
处理的行数(234)始终相同。它会向每个点列添加1。如果我再次运行查询,我在points列中得到2。因此,它一直是错误的
我已经进行了小规模的测试。(9行xyz)并且它工作得非常完美由于
更新的方式,查询没有达到您期望的效果。。。FROM…
在postgres中工作。以下是该网站的报价:
当存在FROM子句时,实际上发生的是将目标表连接到FROM_列表中提到的表,并且连接的每个输出行表示目标表的更新操作。使用FROM时,应确保联接为要修改的每一行最多生成一个输出行。换句话说,目标行不应连接到其他表中的多个行。如果这样做,那么只有一个连接行将用于更新目标行,但使用哪一个连接行并不容易预测。
由于这种不确定性,仅在子选择中引用其他表更安全,尽管通常比使用联接更难读取和更慢
您需要确保正在更新的表(xyztable4
)与FROM
子句中的表之间的联接在主表中每行生成一行。您可以这样做:
with subquery as (
select
floor(x/0.05) xcell,
floor(y/0.05) ycell,
count(z) cnt,
sum(z) total_z
from xyzfloats
group by 1, 2
)
update xyztable4
set
points=points + subquery.cnt,
total = total + subquery.total_z
from subquery
where xyztable4.xcell = subquery.xcell and xyztable4.ycell = subquery.ycell
嗨,谢谢你的帮助和指导。现在正在填充50mm的正方形,但仍然只有234行从可能的7000行添加到xyztable4?哦..对不起,7000条记录已经完成,因为框中现在有多个条目。再次感谢你的帮助