Terve.
SQL-taito ei riitä seuraavanlaiseen kyselyyn. Kysely on luullakseni aika simppeli, mutta ei vain osaa.
Minulla on siis 3 taulua seuraavasti:
REITTI-TAULU:
+----+----------------------+ | id | reittiosa | +----+----------------------+ | 1 | F13:224/&TTY&TTS&TTR | | 2 | E18:140/KEK&KEK&KEK | | 3 | E18:140/RTT&RTT&KEK | +----+----------------------+
OSA-TAULU:
+-----+------------------+----------------------+--------+-----------------+ | id | osa | reitti_nt | ajo_id | reitti_taulu_id | +-----+------------------+----------------------+--------+-----------------+ | 1 | reitti_123000_10 | X130 | 1 | 2 | | 2 | reitti_123000_10 | X131 | 1 | 2 | | 3 | reitti_123000_10 | X132 | 1 | 2 | | 4 | reitti_123000_10 | X133 | 1 | 3 | | 5 | reitti_123000_10 | X134 | 1 | 3 | | 100 | reitti_123000_10 | X130 | 2 | 2 | | 101 | reitti_123000_10 | X131 | 2 | 2 | | 102 | reitti_123000_10 | X132 | 2 | 2 | | 103 | reitti_123000_10 | X133 | 2 | 3 | | 104 | reitti_123000_10 | X134 | 2 | 3 | | 230 | xxx_0 | AAR4 | 1 | 1 | | 231 | xxx_0 | AAR4 | 1 | 1 | +-----+------------------+----------------------+--------+-----------------+
AIKA-TAULU:
+-------+-------+-------------+ | aika1 | aika2 |osa_taulu_id | +-------+-------+-------------+ | 4 | 3 | 1 | | 7 | 3 | 2 | | 5 | 2 | 3 | | 9 | 8 | 4 | | 2 | 9 | 5 | | 7 | 1 | 100 | | 2 | 2 | 101 | | 0 | 1 | 102 | | 6 | 2 | 103 | | 2 | 3 | 104 | | 3 | 1 | 230 | | 4 | 3 | 231 | +-------+-------+-------------+
Nyt yritän seuraavaa:
Kun jokin tietty reittiosa-valitaan, esimerkiksi E18:140/KEK&KEK&KEK, niin sillä on tietysti uniikki id, eli tässä tapauksessa = 2
Nyt haen OSA-taulusta kaikki tietueet, joilla on reitti_taulu_id=2 eli saadaan nämä tietueet:
+-----+------------------+----------------------+--------+-----------------+ | id | osa | reitti_nt | ajo_id | reitti_taulu_id | +-----+------------------+----------------------+--------+-----------------+ | 1 | reitti_123000_10 | X130 | 1 | 2 | | 2 | reitti_123000_10 | X131 | 1 | 2 | | 3 | reitti_123000_10 | X132 | 1 | 2 | | 100 | reitti_123000_10 | X130 | 2 | 2 | | 101 | reitti_123000_10 | X131 | 2 | 2 | | 102 | reitti_123000_10 | X132 | 2 | 2 | +-----+------------------+----------------------+--------+-----------------+
Ja kun OSA-taulusta on haettu yllä olevat tiedot, niin jokaiselle OSA-taulun tietueelle löytyy aika1 ja aika2 AIKA-taulusta taas tuon uniikki id:n perusteella.
Esimerkiksi OSA-taulun tietueelle nro 1 löytyy AIKA-taulusta ajat: aika1=4 ja aika2=3.
+-------+-------+-------------+ | aika1 | aika2 |osa_taulu_id | +-------+-------+-------------+ | 4 | 3 | 1 | +-------+-------+-------------+
KYSYMYS: Miten saan seuraavanlaisen kyselyn: Nyt kun on siis valittu tietty reittiosa, esim: E18:140/KEK&KEK&KEK, niin siihen kuuluvat tietueet haetaan OSA-taulusta:
+-----+------------------+----------------------+--------+-----------------+ | id | osa | reitti_nt | ajo_id | reitti_taulu_id | +-----+------------------+----------------------+--------+-----------------+ | 1 | reitti_123000_10 | X130 | 1 | 2 | | 2 | reitti_123000_10 | X131 | 1 | 2 | | 3 | reitti_123000_10 | X132 | 1 | 2 | | 100 | reitti_123000_10 | X130 | 2 | 2 | | 101 | reitti_123000_10 | X131 | 2 | 2 | | 102 | reitti_123000_10 | X132 | 2 | 2 | +-----+------------------+----------------------+--------+-----------------+
Niin nyt laskettaisiin AIKA-taulusta keskiarvo siten, että käytettäisiin ajo_id:tä hyväksi (GROUP BY ?)
Eli lasketaan aika1+aika2 jokaiselle tietueelle, missä on ajo_id=1 ja jaettaisiin kolmella.
Sama tehtäisiin tietusti niille tietuille joilla on ajo_id=2 jne...
Eli loppupelissä haluaisin vain tälläisen tuloksen:
+-------+----------+ |ajo_id |Keskiarvo | +-------+----------+ | 1 | 8 | +-------+----------+ | 2 | 4.33 | +-------+----------+
Eli ajo_id 1:sen keskiarvo saataisiin: (4+3 + 7+3 + 5+2) / 3 = 8
ja ajo_id 2:sen keskiarvo näin: (7+1 + 2+2 + 0+1) / 3 = 4.333
Tiedän kyllä millaista tulosta pitäisi saada, mutta en omista SQL-tietämystä niin paljon, että saisin suoritettua
yo. haun.
Menisiköhän näin?
SELECT o.ajo_id, AVG(a.aika1 + a.aika2) AS Keskiarvo FROM OSA o, AIKA a WHERE o.reitti_taulu_id = 2 AND o.id = a.osa_taulu_id GROUP BY o.ajo_id ORDER BY o.ajo_id ASC
Chiman.
Kiitos. Melkein toimii.
Nyt tulee vain yksi keskiarvo:
+--------+-----------+ | ajo_id | Keskiarvo | +--------+-----------+ | 1 | 8.0000 | +--------+-----------+ 1 row in set (0.00 sec)
Kokeilen muokata kyselyä.
mrkebab kirjoitti:
Chiman.
Kiitos. Melkein toimii.
Otetaan sen verran takaisin, että toimii täydellisesti.
Itse hölmöilin.
Kiitos paljon Chiman !!!
Aihe on jo aika vanha, joten et voi enää vastata siihen.