Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL tapahtumien lukumäärän laskeminen?

wisekki [27.11.2008 13:28:33]

#

Miten tehdään MySQL lauseke, joka hakee taulukosta tapahtumien lukumäärän? Eli taulukko 'tilasto' sisältää kentät: id, käyttäjä, tapahtuma, teksti. Tapahtuma on joko voitto, häviö, tasapeli. Yhdellä käyttäjällä voi olla monta voittoa, häviötä ja tasapeliä. Nyt haluan laskea jokaisen käyttäjän voitot, häviöt ja tasapelit.

Yksinkertaistettuna selitys:

hannu, voitto, 15kpl
hannu, häviö, 23kpl
hannu, tasapeli, 2kpl
pekka, voitto, 31kpl
jne...

Yritin yksinkertaisesti:

"select kayttaja, tapahtuma, teksti, count(tapahtuma) as Yhteensa from tilasto group by tapahtuma"

Tämä siis tulostaa vain 3 riviä eli voitto, häviö, tasapeli ja niiden yhteenlasketut tulokset group by:n takia.

- AnttiK

Metabolix [27.11.2008 13:51:14]

#

Jos viimeinen on tosiaan teksti "15kpl", se on tehty tyhmästi, elämäsi on vaikeaa ja joudut muuttamaan sen luvuksi summaa varten. Jos se on luku (15), kuten sen kaiken järjen mukaan pitäisi olla, tai muutetaan sellaiseksi, voit käyttää SUM-funktiota ja useampaa ryhmittelykenttää.

SELECT kayttaja, tapahtuma, SUM(maara) AS maara FROM tapahtumat GROUP BY kayttaja, tapahtuma;

wisekki [27.11.2008 14:04:21]

#

Yksinkertainen selitys sisälsi vain halutun tulostuksen. Antamallasi lausekkeella saan tulostettua jokaiselle kayttajalle voiton, häviön ja tasapelin, mutta jostain syystä kaikkien määrä on 0 :(

Eli tietokanta on tässä mallissa:

id, kayttaja, tapahtuma, teksti
-------------------------------
1, hannu, voitto, tekstiä
2, pekka, havio, tekstiä2
3, hannu, häviö, tekstiä3
4, hannu, voitto, tekstiä jne...

--edit--

Jahas olikin hieman yksinkertaisempi, eli sain toimimaan lausekkeella: "select kayttaja, tapahtuma, count(tapahtuma) as maara from tilasto group by kayttaja, tapahtuma"

Teuro [27.11.2008 17:28:24]

#

Eli minkälainen tietokanta sulla on tarkkaan ottaen? Ilmeisesti ainakin taulu nimet

id|nimi
1  hannu
2  pekka
3  juha

tulokset

id|nimi_id|tulos
1|1|voitto
2|1|tasapeli
3|2|häviö
4|1|voitto
jne...

Näistä pitäs saada tulokset laskettua yhteenvetoa varten? Tee seuraavanlainen SQL-lause.

SELECT
nimet.nimi,
tulokset.tulos,
COUNT(*) AS maara
FROM
tulokset,
nimet
WHERE
nimet.id = tulokset.nimi_id
GROUP BY tulokset.tulos,
nimet.nimi
ORDER BY nimet.nimi

Tulostaa jotenkin näin.

hannu  tasapeli 2
hannu  voitto   1
juha   voitto   2
juha   häviö    1
pekka  tasapeli 1
pekka  voitto   1

Vastaus

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

Tietoa sivustosta