sql >> データベース >  >> RDS >> PostgreSQL

いくつかのクエリを使用して、多くのテーブルから物事を計算するにはどうすればよいですか?

    はい、行きましょう。

    (a)

    SELECT MAX(A.kend) - MIN( A.kstart) as a
    FROM Table A
    

    (b)

    編集済み 表BのgidがPKであると仮定すると...

    with CTE( max_kend, min_x) as (
     SELECT MAX(A.kend), NULL
     FROM TableA A
    )
    select B.gid, MAX(CTE.max_kend) - B.min_x as b
     FROM TableB B 
     cross join CTE
    

    (c)

    with CTE( max_kend, min_x) as (
     SELECT MAX(A.kend), NULL
     FROM TableA A
    ),
    r_b as (
     select B.gid, MAX(CTE.max_kend) - B.min_x as b
      FROM TableB B 
      cross join CTE
    ),
    r_a as (
        SELECT MAX(A.kend) - MIN( A.kstart) as a
        FROM Table A
    )
    select r_b.gid, r_a.a / r_b.b as my_ratio
    from r_a cross join r_b
    

    (d)

    with CTE( max_kend, min_x) as (
     SELECT MAX(A.kend), NULL
     FROM TableA A
    ),
    r_b as (
     select B.gid, MAX(CTE.max_kend) - B.min_x as b
      FROM TableB B 
      cross join CTE
    ),
    r_a as (
        SELECT MAX(A.kend) - MIN( A.kstart) as a
        FROM Table A
    ),
    r_ratio as (
      select r_b.gid, r_a.a / r_b.b as my_ratio
      from r_a cross join r_b
    )
    select ST_Interpolate(A.the_geom,  r_ratio.my_ratio )   
    from TableB B 
    inner join r_ratio on B.gid = r_ratio.gid
    

    (e、f)

    with CTE( max_kend, min_x) as (
     SELECT MAX(A.kend), NULL
     FROM TableA A
    ),
    r_b as (
     select B.gid, MAX(CTE.max_kend) - B.min_x as b
      FROM TableB B 
      cross join CTE
    ),
    r_a as (
        SELECT MAX(A.kend) - MIN( A.kstart) as a
        FROM Table A
    ),
    r_ratio as (
      select r_b.gid, r_a.a / r_b.b as my_ratio
      from r_a cross join r_b
    ),
    r_new_int as (
      select ST_Interpolate(A.the_geom,  r_ratio.my_ratio ) as new_int
      from TableB B 
      inner join r_ratio on B.gid = r_ratio.gid
    )
    UPDATE tableB
    set tableB.the_geom = n.new_int
    from r_new_int n
    where 
      n.gid = tableB.gid and
      tableB.the_geom  is NULL
    

    免責事項、testetではありません。

    編集済み

    with CTE( max_kend) as (
     SELECT MAX(A.kend)
     FROM centerline A
    ),
    r_b as (
     select B.ctrl_sec_no,B.gid, MAX(CTE.max_kend) - B.km as b
      FROM land_inventory B cross join CTE group by B.gid,B.ctrl_sec_no,B.km
    ),
    r_a as (
        SELECT MAX(A.kend) - MIN(A.kstart) as a
        FROM centerline A
    ),
    r_ratio as (
      select r_b.gid, r_b.b / r_a.a  as my_ratio
      from r_a cross join r_b
    ),
    r_new_int as (
      select     
        B.gid,
        r_ratio.my_ratio,
        B.ctrl_sec_no,B.km,
        ST_AsText(ST_Envelope(ST_Collect(
              ST_line_interpolate_point(A.the_geom,  r_ratio.my_ratio 
        )))) as new_int 
      from 
        centerline A inner join
        land_inventory B 
           on A.ctrl_sec_no = B.ctrl_sec_no 
           inner join 
        r_ratio on B.gid = r_ratio.gid 
      group by B.ctrl_sec_no,B.gid,r_ratio.my_ratio,B.km order by B.ctrl_sec_no
    ) 
    UPDATE land_inventory
    set the_geom = n.new_int
    from r_new_int n
    where 
      n.gid = land_inventory.gid and
      land_inventory.the_geom is NULL;
    



    1. 警告:mysql_real_escape_string()[function.mysql-real-escape-string]:サーバーへのリンクを確立できませんでした

    2. MySQLdbでのSQLAlchemyの目的

    3. mysqlの主キーとしての2つの列?

    4. カテゴリおよびサブカテゴリによるMySQLの順序