Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: SQL kysely hakusessa

punppis [21.09.2010 17:44:36]

#

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.

Metabolix [21.09.2010 17:46:56]

#

SELECT
  paataulu.nimi,
  tyyppi.arvo1 + tyyppi.arvo2 AS summa
FROM
  paataulu, tyyppi
WHERE
  paataulu.tyyppi_id = tyyppi.id

punppis [22.09.2010 04:34:29]

#

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

Metabolix [22.09.2010 08:00:01]

#

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)?

punppis [22.09.2010 20:15:06]

#

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;

punppis [26.09.2010 00:28:08]

#

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

Grez [26.09.2010 00:45:08]

#

Seuraavaksi keksit GROUP BY

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta