【问题标题】:Wrong output when writing a SQL query using Postgis functions使用 Postgis 函数编写 SQL 查询时输出错误
【发布时间】:2015-01-08 10:51:46
【问题描述】:

我正在做我的功课,我即将完成它。问题是我正确的最后一个查询应该只返回 10 行,但我现在拥有的返回 16 行,我不知道我做错了什么。查询的定义是

Find all urban areas that (1) have a combined land & water area of greater than 1500 square 
kilo- meters and (2) intersect multiple states. Your query should return the urban area name 
(name10) and a count of the number of states intersected. The results should be first ordered by 
the number of states intersected (in descending order) and secondarily by alphabetical order of 
the urban area names from (A to Z). (Note: Pay very close attention to the units used for the 
areas in this question.) (10 records) 

我编写的返回 16 条记录的 SQL 查询是

SELECT area1.name10, COUNT(*) AS Count 
FROM tl_2010_us_uac10 AS area1, tl_2010_us_state10 AS area2 
WHERE ((area1.aland10 + area1.awater10)/1000) > 1500 
AND ST_Intersects(area1.coords, area2.coords) 
GROUP BY area1.name10 HAVING COUNT(*) > 2 
ORDER BY Count DESC, area1.name10 ASC;

我使用的两个表是

Table "public.tl_2010_us_state10"
    Column   |            Type             |                            Modifiers                             
 ------------+-----------------------------+-------------------------------------
  gid        | integer                     | not null default 
  region10   | character varying(2)        | 
  division10 | character varying(2)        | 
  statefp10  | character varying(2)        | 
  statens10  | character varying(8)        | 
  geoid10    | character varying(2)        | 
  stusps10   | character varying(2)        | 
  name10     | character varying(100)      |
  lsad10     | character varying(2)        | 
  mtfcc10    | character varying(5)        | 
  funcstat10 | character varying(1)        | 
  aland10    | double precision            | 
  awater10   | double precision            | 
  intptlat10 | character varying(11)       | 
  intptlon10 | character varying(12)       | 
  coords     | geometry(MultiPolygon,4326) | 

 Indexes:
 "tl_2010_us_state10_pkey" PRIMARY KEY, btree (gid)
 "tl_2010_us_state10_coords_gist" gist (coords)

那么这是城市信息表。

                                      Table "public.tl_2010_us_uac10"
    Column   |            Type             |                           Modifiers                         
 ------------+-----------------------------+-------------------------------------
 gid        | integer                     | not null default 
 uace10     | character varying(5)        | 
 geoid10    | character varying(5)        | 
 name10     | character varying(100)      |
 namelsad10 | character varying(100)      | 
 lsad10     | character varying(2)        | 
 mtfcc10    | character varying(5)        | 
 uatyp10    | character varying(1)        | 
 funcstat10 | character varying(1)        | 
 aland10    | double precision            | 
 awater10   | double precision            | 
 intptlat10 | character varying(11)       | 
 intptlon10 | character varying(12)       | 
 coords     | geometry(MultiPolygon,4326) | 

 Indexes:
"tl_2010_us_uac10_pkey" PRIMARY KEY, btree (gid)
"tl_2010_us_uac10_coords_gist" gist (coords)

提前致谢

【问题讨论】:

    标签: php postgresql subquery postgis psql


    【解决方案1】:

    面积以平方米为单位。要将平方米转换为平方公里,请除以 1,000,000,而不是 1,000。

    1 公里 = 1,000 米。 1km2 = (1,000m)**2 = 1,000,000(m2)

    【讨论】:

    • 是的,它确实说要非常关注问题中的单位:D。
    猜你喜欢
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 2012-12-13
    相关资源
    最近更新 更多