-
Notifications
You must be signed in to change notification settings - Fork 2
queryUtili
Andrea Borruso edited this page Jul 27, 2016
·
12 revisions
Salvo dove indicato diversamente, le query di sotto sono eseguite su un db SQLite, anzi SpatiaLite (SQLite con estensioni spaziali). A mo di esempio si può usare questo db.
Verificare differenze di numero di corse della stessa rotta nelle due direzioni di marcia, in un giorno feriale
Query:
SELECT route_id AS "rotta",quantita_direzione0,quantita_direzione1, ("quantita_direzione0"-"quantita_direzione1")
AS differenza
FROM (SELECT * FROM (SELECT count(*)AS quantita_direzione0,"route_id"
FROM "trips"
where service_id="FR" AND direction_id=0
GROUP BY route_id)
JOIN (SELECT count(*)AS quantita_direzione1,"route_id"
FROM "trips"
where service_id="FR" AND direction_id=1
GROUP BY route_id
) using (route_id))
where differenza != 0Esempio output:
| rotta | quantita_direzione0 | quantita_direzione1 | differenza |
|---|---|---|---|
| 101 | 192 | 193 | -1 |
| 210 | 38 | 39 | -1 |
| 309 | 55 | 54 | 1 |
| 389 | 2 | 1 | 1 |
| 462 | 34 | 32 | 2 |
| 616 | 46 | 48 | -2 |
| 628 | 54 | 47 | 7 |
| 628P | 13 | 12 | 1 |
| 704 | 45 | 47 | -2 |
| 731 | 45 | 48 | -3 |
Numero di corse per rotta in un giorno feriale, in una delle due direzioni di marcia (più lunghezza della rotta)
Query:
SELECT quantità,"route_id" as Rotta,"route_long_name" AS Nome, CAST(ST_Length(ST_Transform(geometry,32633)) AS INTEGER) as "Lunghezza (m.)"
FROM
(SELECT count(*) AS Quantità, "route_id"
FROM "trips"
where service_id="FR" AND direction_id=0
GROUP BY route_id
order by quantità desc)
JOIN routes as rotte using ("route_id")
order by Quantità DESCEsempio output::
| Quantità | Rotta | Nome | Lunghezza |
|---|---|---|---|
| 192 | 101 | STADIO - STAZIONE CENTRALE | 12373 |
| 96 | 806 | POLITEAMA - MONDELLO (TORRE) | 21391 |
| 80 | ARANC | PORTA FELICE - INDIPENDENZA | 8315 |
| 75 | 84 | MONDELLO (TORRE) - VALDESI | 5476 |
| 72 | 237 | PARCHEGGIO ORETO - STAZIONE CENTRALE | 5160 |
| 64 | 102 | STAZ. NOTARBARTOLO - STAZIONE CENTRALE | 8037 |
| 63 | 109 | PARCHEGGIO BASILE - STAZIONE CENTRALE | 7442 |
| 60 | EXPR | PARCHEGGIO BASILE - INDIPENDENZA | 4894 |
| 60 | 544 | JOHN LENNON - MONDELLO | 22543 |
| 55 | 309 | PARCHEGGIO BASILE - ROCCA | 13496 |
| 54 | 628 | SFERRACAVALLO - STADIO | 19761 |
| ... | ... | ... | ... |
Tutte le corse della linea 101 in un giorno feriale, in una delle due direzioni previste, ordinate per numero corsa e orario
SELECT "stop_id","stop_name","trip_id",arrival_time
FROM (SELECT "a"."stop_id" AS "stop_id", "a"."stop_code" AS "stop_code",
"a"."stop_name" AS "stop_name", "b"."trip_id" AS "trip_id",
"b"."stop_id" AS "stop_id_1",arrival_time
FROM "stops" AS "a"
JOIN "stop_times" AS "b" USING ("stop_id"))
JOIN trips using ("trip_id")
WHERE service_id="FR" and direction_id=0 and route_id=101
order by trip_id,arrival_timeEsempio di output:
| stop_id | Nome fermata | trip_id | orario |
|---|---|---|---|
| 1970 | STADIO | 293 | 05:45:00 |
| 560 | CROCE ROSSA - DE GASPERI | 293 | 05:47:59 |
| 566 | CROCE ROSSA - VALDEMONE | 293 | 05:48:40 |
| 562 | CROCE ROSSA - EMILIA | 293 | 05:49:27 |
| 564 | CROCE ROSSA - STATUA | 293 | 05:50:34 |
| 1031 | LIBERTA' - LAZIO | 293 | 05:51:43 |
| 1029 | LIBERTA' - DON BOSCO | 293 | 05:52:38 |
| 1033 | LIBERTA' - MATTEOTTI | 293 | 05:53:27 |
| 1039 | LIBERTA' - UGDULENA | 293 | 05:54:31 |
| 1027 | LIBERTA' - D'ANNUNZIO | 293 | 05:55:19 |
| 1041 | LIBERTA' - VILLA PAINO | 293 | 05:56:17 |
| ... | ... | ... | ... |
SELECT count(*) AS "quantità", stop_id,"stop_name" FROM (SELECT * from (SELECT "a"."stop_id" AS "stop_id",
"a"."stop_name" AS "stop_name", "b"."trip_id", "b"."arrival_time"
FROM "stops" AS "a"
JOIN "stop_times" AS "b" USING ("stop_id")) AS "c"
JOIN "trips" AS "b" USING ("trip_id")
WHERE service_id="FR")
group BY stop_id
order by "quantità" DESCEsempio di output:
| Numero di passaggi | stop_id | Nome |
|---|---|---|
| 666 | 912 | INDIPENDENZA - PALAZZO REALE |
| 592 | 1037 | LIBERTA' - QUINTINO SELLA |
| 574 | 1985 | STAZIONE CENTRALE - PENSILINA INTERNA |
| 491 | 390 | CAVOUR |
| 478 | 2019 | TETI |
| 473 | 1492 | PIAZZA PAPA GIOVANNI PAOLO II |
| 473 | 2115 | VILLA SOFIA - CROCE ROSSA |
| 467 | 1582 | POLITEAMA - TURATI |
| 445 | 1035 | LIBERTA' - NOTARBARTOLO |
| 426 | 1605 | PRINCIPE DI SCALEA - MONDELLO |
| 426 | 1624 | REGINA ELENA - CIRCE |
| 426 | 1629 | REGINA ELENA - STABILIMENTO |
| 426 | 1630 | REGINA ELENA - TETI |
| 412 | 1759 | ROMA - BELMONTE |
| 412 | 1770 | ROMA - STABILE |
| ... | ... | ... |
Nota bene, la query di sotto non è applicabile al db di esempio, quindi al momento vale come spunto teorico
SELECT a.*, b.Totale AS Popolazione, (("a"."totale" * 1.0) / ("b"."Totale" * 1.0)) AS fermatePop
FROM (SELECT CAST("poligoni"."UPL" AS INTEGER) AS "UPL", nome, count(punti.geometry) AS totale,
CAST(ST_AREA(ST_Transform(poligoni.geometry,32633)) AS INTEGER) AS "Area(m2)"
FROM "00UPL" as poligoni LEFT JOIN stops as punti
ON st_contains(poligoni.geometry,punti.geometry)
GROUP BY poligoni.UPL) AS "a"
JOIN "00PopolazioneUpl2011" as "b" using ("UPL")
ORDER by "fermatePop" DESCSELECT "a".*,b.stop_name AS "nomeFermata",b.geometry
FROM (SELECT stop_id,GROUP_CONCAT(route_id) AS linee
FROM (SELECT stop_id,route_id
FROM (SELECT "trip_id", "stop_id","route_id"
FROM "stop_times"
JOIN trips using("trip_id")
order by stop_id,trip_id)
group by stop_id,route_id)
group by stop_id) AS "a"
JOIN stops as "b" using("stop_id")Esempio di output:
| stop_id | linee | nomeFermata |
|---|---|---|
| 1 | 104,118 | A. AMEDEO - COLONNA ROTTA |
| 10 | 100 | ACC. A29 MONTE - WELLS |
| 100 | 645,87 | APOLLO - AGLAIA |
| 1002 | 534 | LEONARDO DA VINCI - SILVESTRI |
| 1004 | 513,H2 | LEONARDO DA VINCI - UDITORE |
| 1006 | 107,603 | LEONI - FAVORITA |
| 1007 | 107,603 | LEONI - FAVORITA |
| 1008 | 243 | LEVRIERE - ANTILOPE |
| 1009 | 243 | LEVRIERE - BASSOTTO |
| ... | ... | ... |