为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: 8
【操作系统】:linux
【CPU】:
【问题描述】*:数据库左联分组查询sql脚本如下:
select count(1)
from (select
r."id", max(rr.fire_danger_rating)
from "oyz_hubei_commanddispatch_dm"."oyz_region" r
LEFT join "oyz_hubei_commanddispatch_dm"."oyz_grid_region" ogr
on r.id = ogr.region_id
left join "oyz_hubei_commanddispatch_dm"."oyz_warning_grid_ffmc_level_predict" rr
on ogr.grid_id=rr.grid_id
group by r.id );
oyz_region 表只有 1591条,此sql却得到了三百多万数据。
按照下面写法却是 1591条:
select count(1)
from (select
r."id", max(rr.fire_danger_rating)
from "oyz_hubei_commanddispatch_dm"."oyz_region" r
LEFT join "oyz_hubei_commanddispatch_dm"."oyz_grid_region" ogr
on r.id = ogr.region_id
left join "oyz_hubei_commanddispatch_dm"."oyz_warning_grid_ffmc_level_predict" rr
on ogr.grid_id=rr.grid_id
group by r.id ,ogr."region_id");
下面的写法:count(1) 得到的结果是三百多万,但是如果点 DM管理工具的所有数据,看到的数据却是1591行:
select count(1)
from (select
r."id", max(rr.fire_danger_rating)
from "oyz_hubei_commanddispatch_dm"."oyz_region" r
LEFT join "oyz_hubei_commanddispatch_dm"."oyz_grid_region" ogr
on r.id = ogr.region_id
left join "oyz_hubei_commanddispatch_dm"."oyz_warning_grid_ffmc_level_predict" rr
on ogr.grid_id=rr.grid_id
group by r.id ORDER by r."id" asc);
如果第一个查询确实返回了300多万条数据,请仔细检查数据库和查询逻辑,以确保没有其他因素干扰查询结果。
第二个查询和第三个查询(带有ORDER BY)应该返回相同的行数(1591条),因为GROUP BY子句确保了每个r.id只出现一次。
如果在数据库管理工具中直接查看oyz_region表的数据,确实只有1591行,那么第一个查询的结果应该是有问题的,需要进一步调查。