TABLE tyyppi id int arvo1 int arvo2 int TABLE paataulu tyyppi_id int nimi text
Miten saisin noista tauluista sellaisen kyselyn, joka palauttaa päätaulusta nimen ja tyypin arvojen summat.
SELECT paataulu.nimi, tyyppi.arvo1 + tyyppi.arvo2 AS summa FROM paataulu, tyyppi WHERE paataulu.tyyppi_id = tyyppi.id
Jäi tietenkin mainitsematta, että tuosta tyyppi-taulusta pitäisi summailla kaikki rivit, mutta keksin tuon samaisen ratkaisun pienellä muutoksella heti postauksen jälkeen :D
Tarkoitatko, että tyyppi-taulussa on monta riviä samalla id:llä (mikä on typerää, koska id:n pitäisi olla yksilöivä) vai että id:stä ei pidä välittää (mikä taas on erittäin epäloogista, kun tuollainen triviaali liitos tyyppi_id = id on tarjolla)?
Oikea tauluhan on isompi, jossa on referenssejä toisten taulujen tietoihin (esimerkissä id). Tarkoitus oli siis laskea kaikki tietyn referenssin arvot yhteen. Taulussa on siis monta riviä samalla referenssi-id:llä, mutta jokaisella rivillä on myös normaali uniikki id.
Eli tyyppi:
+------+-----------+------+-------+ | id | tyyppi_id | arvo | arvo2 | +------+-----------+------+-------+ | 1 | 1 | 10 | 17 | | 2 | 1 | 34 | 27 | | 3 | 1 | 21 | 18 | +------+-----------+------+-------+
ja päätaulu:
+----+-----------+-------+ | id | tyyppi_id | nimi | +----+-----------+-------+ | 1 | 1 | Testi | +----+-----------+-------+
tällä kyselyllä onnistui:
SELECT (SUM(tyyppi.arvo) + SUM(tyyppi.arvo2)) AS summa, paataulu.nimi FROM paataulu, tyyppi WHERE paataulu.tyyppi_id = tyyppi.tyyppi_id;
Huomasin vasta, että tämä ei toimi jos päätaulusta halutaan hakea useampi rivi. Mitenköhän tämä olisi järkevintä toteuttaa? No hetken pähkäilyn jälkeen tajusin subqueryt:
SELECT ( SELECT SUM(tyyppi.arvo) + SUM(tyyppi.arvo2) FROM tyyppi WHERE tyyppi.tyyppi_id = tyyppi_id ) AS summa FROM paataulu
Seuraavaksi keksit GROUP BY
Aihe on jo aika vanha, joten et voi enää vastata siihen.