Changeset 62 for trunk/workshop-foss4g/joins_exercises.rst
- Timestamp:
- 17/03/2012 00:49:40 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/workshop-foss4g/joins_exercises.rst
r47 r62 6 6 Voici un petit rappel de certaines des fonctions vues précédemment. Elles seront utiles pour les exercices ! 7 7 8 9 10 * :command:`ST_Area(geometry)` retour be l'aire d'un polygone11 * :command:`ST_AsText(geometry)` ret urns WKT ``text``12 * :command:`ST_Contains(geometry A, geometry B)` retourne vrai si la géométrie A contient la géométrie B8 * :command:`sum(expression)` agrégation retournant la somme d'un ensemble 9 * :command:`count(expression)` agrégation retournant le nombre d'éléments d'un ensemble 10 * :command:`ST_Area(geometry)` retourne l'aire d'un polygone 11 * :command:`ST_AsText(geometry)` retourne un texte WKT 12 * :command:`ST_Contains(geometry A, geometry B)` retourne TRUE si la géométrie A contient la géométrie B 13 13 * :command:`ST_Distance(geometry A, geometry B)` retourne la distance minimum entre deux géométries 14 * :command:`ST_DWithin(geometry A, geometry B, radius)` retourne vraisi la A est distante d'au plus radius de B15 * :command:`ST_GeomFromText(text)` ret urns ``geometry``16 * :command:`ST_Intersects(geometry A, geometry B)` ret urns the true if geometry A intersects geometryB17 * :command:`ST_Length(linestring)` retourne la longueur d'une li nestring18 * :command:`ST_Touches(geometry A, geometry B)` retourne vraisi le contour extérieur de A touche B19 * :command:`ST_Within(geometry A, geometry B)` retourne vraisi A est hors de B14 * :command:`ST_DWithin(geometry A, geometry B, radius)` retourne TRUE si la A est distante d'au plus radius de B 15 * :command:`ST_GeomFromText(text)` retourne une géométrie 16 * :command:`ST_Intersects(geometry A, geometry B)` retourne TRUE si la géométrie A intersecte la géométrie B 17 * :command:`ST_Length(linestring)` retourne la longueur d'une ligne 18 * :command:`ST_Touches(geometry A, geometry B)` retourne TRUE si le contour extérieur de A touche B 19 * :command:`ST_Within(geometry A, geometry B)` retourne TRUE si A est hors de B 20 20 21 Souvenez-vous aussi des tables à votre disposition : 21 Souvenez-vous aussi des tables à votre disposition : 22 22 23 * ``nyc_census_blocks`` 24 23 * ``nyc_census_blocks`` 24 25 25 * name, popn_total, boroname, the_geom 26 26 27 27 * ``nyc_streets`` 28 28 29 29 * name, type, the_geom 30 30 31 31 * ``nyc_subway_stations`` 32 32 33 33 * name, routes, the_geom 34 34 35 35 * ``nyc_neighborhoods`` 36 36 37 37 * name, boroname, the_geom 38 38 … … 40 40 --------- 41 41 42 * **"Quelle station de métro sse situe dans le quartier 'Little Italy' ? Quelle est l'itinéraire de métro à emprunter ?"**43 42 * **"Quelle station de métro se situe dans le quartier 'Little Italy' ? Quelle est l'itinéraire de métro à emprunter ?"** 43 44 44 .. code-block:: sql 45 46 SELECT s.name, s.routes 45 46 SELECT s.name, s.routes 47 47 FROM nyc_subway_stations AS s 48 JOIN nyc_neighborhoods AS n 49 ON ST_Contains(n.the_geom, s.the_geom) 48 JOIN nyc_neighborhoods AS n 49 ON ST_Contains(n.the_geom, s.the_geom) 50 50 WHERE n.name = 'Little Italy'; 51 51 52 :: 53 54 name | routes 52 :: 53 54 name | routes 55 55 -----------+-------- 56 56 Spring St | 6 57 57 58 58 * **"Quels sont les quartiers desservis pas le train numéro 6 ?"** (Astuce: la colonne ``routes`` de la table ``nyc_subway_stations`` dispose des valeurs suivantes: 'B,D,6,V' et 'C,6') 59 59 60 60 .. code-block:: sql 61 62 SELECT DISTINCT n.name, n.boroname 61 62 SELECT DISTINCT n.name, n.boroname 63 63 FROM nyc_subway_stations AS s 64 JOIN nyc_neighborhoods AS n 65 ON ST_Contains(n.the_geom, s.the_geom) 64 JOIN nyc_neighborhoods AS n 65 ON ST_Contains(n.the_geom, s.the_geom) 66 66 WHERE strpos(s.routes,'6') > 0; 67 67 68 68 :: 69 70 name | boroname 69 70 name | boroname 71 71 --------------------+----------- 72 72 Midtown | Manhattan … … 87 87 88 88 .. note:: 89 90 Nous avons utilisé le mot clef ``DISTINCT`` pour supprimer les répétitions dans notre ensemble de résultats où il y avait plus d'une seule station de métro dans le quartier. 91 89 90 Nous avons utilisé le mot clef ``DISTINCT`` pour supprimer les répétitions dans notre ensemble de résultats où il y avait plus d'une seule station de métro dans le quartier. 91 92 92 * **"AprÚs le 11 septembre, le quartier de 'Battery Park' était interdit d'accÚs pendant plusieurs jours. Combien de personnes ont dû être évacuées ?"** 93 93 94 94 .. code-block:: sql 95 95 96 96 SELECT Sum(popn_total) 97 97 FROM nyc_neighborhoods AS n 98 JOIN nyc_census_blocks AS c 99 ON ST_Intersects(n.the_geom, c.the_geom) 98 JOIN nyc_census_blocks AS c 99 ON ST_Intersects(n.the_geom, c.the_geom) 100 100 WHERE n.name = 'Battery Park'; 101 102 :: 101 102 :: 103 103 104 104 9928 105 105 106 106 * **"Quelle est la densité de population (personne / km^2) des quartiers de 'Upper West Side' et de 'Upper East Side' ?"** (Astuce: il y a 1000000 m^2 dans un km^2.) 107 107 108 108 .. code-block:: sql 109 110 SELECT 111 n.name, 109 110 SELECT 111 n.name, 112 112 Sum(c.popn_total) / (ST_Area(n.the_geom) / 1000000.0) AS popn_per_sqkm 113 113 FROM nyc_census_blocks AS c … … 117 117 OR n.name = 'Upper East Side' 118 118 GROUP BY n.name, n.the_geom; 119 119 120 120 :: 121 122 name | popn_per_sqkm 121 122 name | popn_per_sqkm 123 123 -----------------+------------------ 124 124 Upper East Side | 47943.3590089405 125 125 Upper West Side | 39729.5779474286 126 126 127
Note: See TracChangeset
for help on using the changeset viewer.