select a00.*,(case when a01.cnt_5g>=2 and network_type='4G' then '5G' else network_type end) as net2, (case when a01.cnt_5g>=2 and network_type='4G' and a02.start_day2 is not null then a02.start_day2 else a00.start_day end) as start_day2 from hwx1118357.tmp_pt04_op_grid_h230530v1mpp_ctya00 a00 inner join hwx1118357.tmp_pt04_op_grid_h230530v1mpp_ctya01 a01 on a00.operator_code=a01.operator_code and cast(floor(a00.grid_latitude/(45.0/3600)) as bigint)=a01.latid and cast(floor(a00.grid_longitude/(45.0/3600)) as bigint)=a01.lonid left join hwx1118357.tmp_pt04_op_grid_h230530v1mpp_ctya02 a02 on a00.operator_code=a02.operator_code and cast(floor(a00.grid_latitude/(45.0/3600)) as bigint)=a02.latid and cast(floor(a00.grid_longitude/(45.0/3600)) as bigint)=a02.lonid ;解析
时间: 2024-04-03 15:36:31 浏览: 134
T_CNT.rar_.com.cnT_T_320F2812调试_T—CNT_cnt ctrl
这是一段 SQL 查询语句,用于从三个表 `hwx1118357.tmp_pt04_op_grid_h230530v1mpp_ctya00`、`hwx1118357.tmp_pt04_op_grid_h230530v1mpp_ctya01`、`hwx1118357.tmp_pt04_op_grid_h230530v1mpp_ctya02` 中联合查询出数据。其中 `hwx1118357.tmp_pt04_op_grid_h230530v1mpp_ctya00` 表是基础表,包含了原始数据;`hwx1118357.tmp_pt04_op_grid_h230530v1mpp_ctya01` 表是根据 `operator_code`、`latid`、`lonid` 分组后,计算 5G 数量的查询结果;`hwx1118357.tmp_pt04_op_grid_h230530v1mpp_ctya02` 表是根据 `operator_code`、`latid`、`lonid` 分组后,计算 5G 开通日期的查询结果。
具体来说,这段代码使用了两个左连接 `left join` 和一个内连接 `inner join`。内连接通过 `operator_code`、`latid`、`lonid` 连接基础表和第一个查询结果表,从而得到每个记录对应的 5G 数量;左连接通过 `operator_code`、`latid`、`lonid` 连接基础表和第二个查询结果表,从而得到每个记录对应的 5G 开通日期。注意,左连接是为了处理一些没有 5G 开通日期的记录,这些记录的 `start_day2` 字段会使用原始数据表中的 `start_day` 字段。
最终查询结果会显示每条记录的所有字段,其中会根据 5G 数量和网络类型 `network_type` 进行判断,如果 5G 数量大于等于 2 并且网络类型为 4G,则将网络类型修改为 5G(使用了 `case when` 语句)。同时,如果 5G 数量大于等于 2 并且网络类型为 4G,并且该记录对应的 5G 开通日期不为空,则将 `start_day2` 字段修改为对应的日期;否则,将 `start_day2` 字段设置为原始数据表中的 `start_day` 字段。
阅读全文