【问题标题】:SQL CASE WHEN: is there a limit ( in number of characters )? [closed]SQL CASE WHEN:是否有限制(字符数)? [关闭]
【发布时间】:2021-10-12 08:19:43
【问题描述】:

我正在使用 case when 语句将位置(起点和终点纬度、经度)分组为 3 个区域。

为每个区域运行 1 个查询工作正常。

只需将所有区域捆绑在一个查询中,结果为空。

select    period
        , case 
          when ( in_polygon("polygon", starting_lng, starting_lat, <coordinates_1__5739_characters> ) = True
            or   in_polygon("polygon",     dest_lng,     dest_lat, <coordinates_1__5739_characters> ) = True )
          then 'Region 1'
          end as region
        , sum(<metrics>)
from source_table
where <conditions>
group by period, starting_lng, starting_lat, dest_lng, dest_lat
select    period
        , case 
          when ( in_polygon("polygon", starting_lng, starting_lat, <coordinates_2__2471_characters> ) = True
            or   in_polygon("polygon",     dest_lng,     dest_lat, <coordinates_2__2471_characters> ) = True ) 
          then 'Region 2'
          end as region
        , sum(<metrics>)
from source_table
where <conditions>
group by period, starting_lng, starting_lat, dest_lng, dest_lat
select    period
        , case 
          when ( in_polygon("polygon", starting_lng, starting_lat, <coordinates_3__3039_characters> ) = True
            or   in_polygon("polygon",     dest_lng,     dest_lat, <coordinates_3__3039_characters> ) = True )
          then 'Region 3'
          end as region
        , sum(<metrics>)
from source_table
where <conditions>
group by period, starting_lng, starting_lat, dest_lng, dest_lat

上面的 3 个查询工作正常。以下一项结果为空:

select    period
        , case 
          when ( in_polygon("polygon", starting_lng, starting_lat, <coordinates_1__5739_characters> ) = True
            or   in_polygon("polygon",     dest_lng,     dest_lat, <coordinates_1__5739_characters> ) = True )
          then 'Region 1'
          when ( in_polygon("polygon", starting_lng, starting_lat, <coordinates_2__2471_characters> ) = True
            or   in_polygon("polygon",     dest_lng,     dest_lat, <coordinates_2__2471_characters> ) = True ) 
          then 'Region 2' 
          when ( in_polygon("polygon", starting_lng, starting_lat, <coordinates_3__3079_characters> ) = True
            or   in_polygon("polygon",     dest_lng,     dest_lat, <coordinates_3__3079_characters> ) = True )
          then 'Region 3'
          end as region
        , sum(<metrics>)
from source_table
where <conditions>
group by period, starting_lng, starting_lat, dest_lng, dest_lat

观察到坐标字符串很长,这促使我尝试分离区域。

(2 x 5,739 + 2 x 2,417 + 2 x 3,079) = 22,578


我希望你的想法是:

  • case when 语句有限制吗?如果是,上限是多少个字符
  • 有什么比将查询分成三个更实用的解决方案

【问题讨论】:

  • 标记您正在使用的 DBMS。顺便说一句,你拥有的是CASE 表达式,而不是语句。

标签: sql case limit presto


【解决方案1】:

这应该可行:

select    period
        , case 
          when ( in_polygon("polygon", starting_lng, starting_lat, <coordinates_1__5739_characters> ) = True
            or   in_polygon("polygon",     dest_lng,     dest_lat, <coordinates_1__5739_characters> ) = True )
          then 'True' else 'False' end as region1,
          case  when ( in_polygon("polygon", starting_lng, starting_lat, <coordinates_2__2471_characters> ) = True
            or   in_polygon("polygon",     dest_lng,     dest_lat, <coordinates_2__2471_characters> ) = True ) 
          then 'True' else 'False' end as region2, 
          case  when ( in_polygon("polygon", starting_lng, starting_lat, <coordinates_3__3079_characters> ) = True
            or   in_polygon("polygon",     dest_lng,     dest_lat, <coordinates_3__3079_characters> ) = True )
          then 'True' else 'False' end as region3,    
        , sum(<metrics>)
from source_table
where <conditions>
group by period, starting_lng, starting_lat, dest_lng, dest_lat

【讨论】:

  • 非常感谢,院长!它有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多