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
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;
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"
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.