lnxbusdrvr / tikape-kesa2020

mooc.fi Tietokannan perusteet kesä 2020 -tehtäväni ja harjoitustyö.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Vastaukset 90/100

Tehtävä 1

Hae kaikkien elokuvien nimet.

Taulut

Elokuvat
idnimivuosi
1Lumikki1937
2Fantasia1940
3Pinocchio1940
4Dumbo1941
5Bambi1942

Haluttu tulos

Lumikki
Fantasia
Pinocchio
Dumbo
Bambi

Vastauksesi

SELECT nimi FROM Elokuvat;

Mallivastaus

SELECT nimi FROM Elokuvat;

Tehtävä 2

Hae kaikkien elokuvien nimet ja julkaisuvuodet.

Taulut

Elokuvat
idnimivuosi
1Lumikki1937
2Fantasia1940
3Pinocchio1940
4Dumbo1941
5Bambi1942

Haluttu tulos

Lumikki1937
Fantasia1940
Pinocchio1940
Dumbo1941
Bambi1942

Vastauksesi

SELECT nimi,vuosi FROM Elokuvat;

Mallivastaus

SELECT nimi, vuosi FROM Elokuvat;

Tehtävä 3

Hae kaikkien vuonna 1940 julkaistujen elokuvien nimet.

Taulut

Elokuvat
idnimivuosi
1Lumikki1937
2Fantasia1940
3Pinocchio1940
4Dumbo1941
5Bambi1942

Haluttu tulos

Fantasia
Pinocchio

Vastauksesi

SELECT nimi FROM Elokuvat WHERE vuosi=1940;

Mallivastaus

SELECT nimi FROM Elokuvat WHERE vuosi=1940;

Tehtävä 4

Hae ennen vuotta 1950 julkaistujen elokuvien nimet.

Taulut

Elokuvat
idnimivuosi
1Lumikki1937
2Fantasia1940
3Bambi1942
4Peter Pan1953
5Hiidenpata1985

Haluttu tulos

Lumikki
Fantasia
Bambi

Vastauksesi

SELECT nimi FROM Elokuvat WHERE vuosi<1950;

Mallivastaus

SELECT nimi FROM Elokuvat WHERE vuosi<1950;

Tehtävä 5

Hae vuosina 1940–1950 julkaistujen elokuvien nimet.

Taulut

Elokuvat
idnimivuosi
1Lumikki1937
2Fantasia1940
3Bambi1942
4Peter Pan1953
5Hiidenpata1985

Haluttu tulos

Fantasia
Bambi

Vastauksesi

SELECT nimi FROM Elokuvat WHERE vuosi>=1940 AND vuosi<=1950;

Mallivastaus

SELECT nimi FROM Elokuvat WHERE vuosi BETWEEN 1940 AND 1950;

Tehtävä 6

Hae ennen vuotta 1950 tai vuoden 1980 jälkeen julkaistujen elokuvien nimet.

Taulut

Elokuvat
idnimivuosi
1Lumikki1937
2Fantasia1940
3Bambi1942
4Peter Pan1953
5Hiidenpata1985

Haluttu tulos

Lumikki
Fantasia
Bambi
Hiidenpata

Vastauksesi

SELECT nimi FROM Elokuvat WHERE vuosi < 1950 OR vuosi > 1980;

Mallivastaus

SELECT nimi FROM Elokuvat WHERE vuosi<1950 OR vuosi>1980;

Tehtävä 7

Hae kaikkien elokuvien nimet, joita ei ole julkaistu vuonna 1940.

Taulut

Elokuvat
idnimivuosi
1Lumikki1937
2Fantasia1940
3Pinocchio1940
4Dumbo1941
5Bambi1942

Haluttu tulos

Lumikki
Dumbo
Bambi

Vastauksesi

SELECT nimi FROM Elokuvat WHERE vuosi IS NOT 1940;

Mallivastaus

SELECT nimi FROM Elokuvat WHERE vuosi<>1940;

Tehtävä 8

Hae kaikkien elokuvien nimet aakkosjärjestyksessä.

Taulut

Elokuvat
idnimivuosi
1Lumikki1937
2Fantasia1940
3Pinocchio1940
4Dumbo1941
5Bambi1942

Haluttu tulos

Bambi
Dumbo
Fantasia
Lumikki
Pinocchio

Vastauksesi

SELECT nimi FROM Elokuvat ORDER BY nimi;

Mallivastaus

SELECT nimi FROM Elokuvat ORDER BY nimi;

Tehtävä 9

Hae kaikkien elokuvien nimet käänteisessä aakkosjärjestyksessä.

Taulut

Elokuvat
idnimivuosi
1Lumikki1937
2Fantasia1940
3Pinocchio1940
4Dumbo1941
5Bambi1942

Haluttu tulos

Pinocchio
Lumikki
Fantasia
Dumbo
Bambi

Vastauksesi

SELECT nimi FROM Elokuvat ORDER BY nimi DESC;

Mallivastaus

SELECT nimi FROM Elokuvat ORDER BY nimi DESC;

Tehtävä 10

Hae elokuvien nimet ja julkaisuvuodet ensisijaisesti käänteisessä järjestyksessä julkaisuvuoden mukaan, toissijaisesti aakkosjärjestyksessä.

Taulut

Elokuvat
idnimivuosi
1Lumikki1937
2Fantasia1940
3Pinocchio1940
4Dumbo1941
5Bambi1942

Haluttu tulos

Bambi1942
Dumbo1941
Fantasia1940
Pinocchio1940
Lumikki1937

Vastauksesi

SELECT nimi,vuosi FROM Elokuvat ORDER BY vuosi DESC, nimi;

Mallivastaus

SELECT nimi, vuosi FROM Elokuvat ORDER BY vuosi DESC, nimi;

Tehtävä 11

Hae kaikki eri etunimet.

Taulut

Nimet
idetunimisukunimi
1AnnaKorhonen
2AnnaVirtanen
3PekkaKorhonen
4PekkaLahtinen
5PekkaVirtanen

Haluttu tulos

Anna
Pekka

Vastauksesi

SELECT DISTINCT etunimi FROM Nimet;

Mallivastaus

SELECT DISTINCT etunimi FROM Nimet;

Tehtävä 12

Hae kaikki eri nimet.

Taulut

Nimet
idetunimisukunimi
1AnnaKorhonen
2AnnaKorhonen
3PekkaKorhonen
4PekkaVirtanen
5PekkaVirtanen
6PekkaVirtanen

Haluttu tulos

AnnaKorhonen
PekkaKorhonen
PekkaVirtanen

Vastauksesi

SELECT DISTINCT etunimi, sukunimi FROM Nimet;

Mallivastaus

SELECT DISTINCT etunimi, sukunimi FROM Nimet;

Tehtävä 13

Hae työntekijöiden määrä.

Taulut

Tyontekijat
idnimipalkka
1Uolevi2500
2Maija3000
3Liisa5000
4Kaaleppi1500

Haluttu tulos

4

Vastauksesi

SELECT COUNT(*) FROM Tyontekijat;

Mallivastaus

SELECT COUNT(*) FROM Tyontekijat;

Tehtävä 14

Hae niiden työntekijöiden määrä, joiden palkka on yli 2000.

Taulut

Tyontekijat
idnimipalkka
1Uolevi2500
2Maija3000
3Liisa5000
4Kaaleppi1500

Haluttu tulos

3

Vastauksesi

SELECT COUNT(*) FROM Tyontekijat WHERE palkka > 2000;

Mallivastaus

SELECT COUNT(*) FROM Tyontekijat WHERE palkka>2000;

Tehtävä 15

Hae työntekijöiden yhteispalkka.

Taulut

Tyontekijat
idnimipalkka
1Uolevi2500
2Maija3000
3Liisa5000
4Kaaleppi1500

Haluttu tulos

12000

Vastauksesi

SELECT SUM(palkka) FROM Tyontekijat;

Mallivastaus

SELECT SUM(palkka) FROM Tyontekijat;

Tehtävä 16

Hae suurin työntekijän palkka.

Taulut

Tyontekijat
idnimipalkka
1Uolevi2500
2Maija3000
3Liisa5000
4Kaaleppi1500

Haluttu tulos

5000

Vastauksesi

SELECT MAX(palkka) FROM Tyontekijat;

Mallivastaus

SELECT MAX(palkka) FROM Tyontekijat;

Tehtävä 17

Hae eri yritysten määrä.

Taulut

Tyontekijat
idnimipalkkayritys
1Uolevi5000Google
2Maija6000Google
3Liisa2000Amazon
4Kaaleppi7500Microsoft

Haluttu tulos

3

Vastauksesi

SELECT COUNT(DISTINCT yritys) FROM Tyontekijat;

Mallivastaus

SELECT COUNT(DISTINCT yritys) FROM Tyontekijat;

Tehtävä 18

Hae jokaisen yrityksen työntekijöiden määrä.

Vastauksesi

SELECT yritys, COUNT(*) FROM Tyontekijat GROUP BY yritys;

Mallivastaus

SELECT yritys, COUNT(*) FROM Tyontekijat GROUP BY yritys;

Tehtävä 19

Hae jokaisesta yrityksestä suurin työntekijän palkka.

Taulut

Tyontekijat
idnimipalkkayritys
1Uolevi5000Google
2Maija6000Google
3Liisa2000Amazon
4Kaaleppi7500Microsoft

Haluttu tulos

Google6000
Amazon2000
Microsoft7500

Vastauksesi

SELECT yritys, MAX(palkka) FROM Tyontekijat GROUP BY yritys;

Mallivastaus

SELECT yritys, MAX(palkka) FROM Tyontekijat GROUP BY yritys;

Tehtävä 20

Näytä suurin työntekijän palkka yrityksistä, joissa se on ainakin 5000.

Taulut

Tyontekijat
idnimipalkkayritys
1Uolevi5000Google
2Maija6000Google
3Liisa2000Amazon
4Kaaleppi7500Microsoft

Haluttu tulos

Google6000
Microsoft7500

Vastauksesi

SELECT yritys, MAX(palkka) FROM Tyontekijat WHERE palkka >= 5000 GROUP BY yritys;

Mallivastaus

SELECT yritys, MAX(palkka) FROM Tyontekijat GROUP BY yritys HAVING MAX(palkka)>=5000;

Tehtävä 21

Muodosta tuloslista, jossa näkyvät kaikki tulokset.

Taulut

Pelaajat
idnimi
1Uolevi
2Maija
3Kaaleppi
Tulokset
idpelaaja_idtulos
11250
21300
32100
42350
53500

Haluttu tulos

Uolevi250
Uolevi300
Maija100
Maija350
Kaaleppi500

Vastauksesi

SELECT Pelaajat.nimi, Tulokset.tulos FROM Pelaajat, Tulokset WHERE Tulokset.pelaaja_id = Pelaajat.id;

Mallivastaus

SELECT P.nimi, T.tulos FROM Pelaajat P, Tulokset T WHERE P.id=T.pelaaja_id;

Tehtävä 22

Muodosta tuloslista, jossa näkyvät Uolevin tulokset.

Taulut

Pelaajat
idnimi
1Uolevi
2Maija
3Kaaleppi
Tulokset
idpelaaja_idtulos
11250
21300
32100
42350
53500

Haluttu tulos

Uolevi250
Uolevi300

Vastauksesi

SELECT Pelaajat.nimi, Tulokset.tulos FROM Pelaajat, Tulokset WHERE Tulokset.pelaaja_id = Pelaajat.id AND Pelaajat.nimi='Uolevi';

Mallivastaus

SELECT P.nimi, T.tulos FROM Pelaajat P, Tulokset T WHERE P.id=T.pelaaja_id AND P.nimi='Uolevi';

Tehtävä 23

Muodosta tuloslista, jossa näkyvät tulokset, jotka ovat parempia kuin 250.

Taulut

Pelaajat
idnimi
1Uolevi
2Maija
3Kaaleppi
Tulokset
idpelaaja_idtulos
11250
21300
32100
42350
53400
63500

Haluttu tulos

Uolevi300
Maija350
Kaaleppi400
Kaaleppi500

Vastauksesi

SELECT Pelaajat.nimi, Tulokset.tulos FROM Pelaajat, Tulokset WHERE Tulokset.pelaaja_id = Pelaajat.id AND Tulokset.tulos > 250;

Mallivastaus

SELECT P.nimi, T.tulos FROM Pelaajat P, Tulokset T WHERE P.id=T.pelaaja_id AND T.tulos>250;

Tehtävä 24

Muodosta tuloslista, jossa näkyy kaikki tulokset järjestettynä ensisijaisesti käänteisesti pistemäärän mukaan ja toissijaisesti nimen mukaan.

Taulut

Pelaajat
idnimi
1Uolevi
2Maija
3Kaaleppi
Tulokset
idpelaaja_idtulos
11250
21350
32100
42350
53500

Haluttu tulos

Kaaleppi500
Maija350
Uolevi350
Uolevi250
Maija100

Vastauksesi

SELECT Pelaajat.nimi, Tulokset.tulos FROM Pelaajat, Tulokset WHERE Tulokset.pelaaja_id = Pelaajat.id ORDER BY Tulokset.tulos DESC, Pelaajat.nimi;

Mallivastaus

SELECT P.nimi, T.tulos FROM Pelaajat P, Tulokset T WHERE P.id=T.pelaaja_id ORDER BY T.tulos DESC, P.nimi;

Tehtävä 25

Ilmoita jokaisesta pelaajasta, mikä on hänen paras tuloksensa. Voit olettaa, että jokaisella pelaajalla on ainakin yksi tulos.

Taulut

Pelaajat
idnimi
1Uolevi
2Maija
3Kaaleppi
Tulokset
idpelaaja_idtulos
11250
21300
32100
42350
53500

Haluttu tulos

Uolevi300
Maija350
Kaaleppi500

Vastauksesi

SELECT Pelaajat.nimi, MAX(Tulokset.tulos) FROM Pelaajat, Tulokset WHERE Tulokset.pelaaja_id = Pelaajat.id GROUP BY nimi;

Mallivastaus

SELECT P.nimi, MAX(T.tulos) FROM Pelaajat P, Tulokset T WHERE P.id=T.pelaaja_id GROUP BY P.id;

Tehtävä 26

Ilmoita jokaisesta pelaajasta, montako tulosta hänellä on. Voit olettaa, että jokaisella pelaajalla on ainakin yksi tulos.

Taulut

Pelaajat
idnimi
1Uolevi
2Maija
3Kaaleppi
Tulokset
idpelaaja_idtulos
11250
21300
32100
42350
53500

Haluttu tulos

Uolevi2
Maija2
Kaaleppi1

Vastauksesi

SELECT nimi, COUNT(*) FROM Pelaajat, Tulokset WHERE pelaaja_id = Pelaajat.id GROUP BY nimi;

Mallivastaus

SELECT P.nimi, COUNT(T.tulos) FROM Pelaajat P, Tulokset T WHERE P.id=T.pelaaja_id GROUP BY P.id;

Tehtävä 27

Hae kaikista suorituksista opiskelijan nimi, kurssin nimi ja arvosana.

Taulut

Opiskelijat
idnimi
1Uolevi
2Maija
3Kaaleppi
Kurssit
idnimi
1Ohpe
2Ohja
3Tira
4Lama
Suoritukset
opiskelija_idkurssi_idarvosana
113
124
212
245
334

Haluttu tulos

UoleviOhpe3
UoleviOhja4
MaijaOhpe2
MaijaLama5
KaaleppiTira4

Vastauksesi

SELECT Opiskelijat.nimi, Kurssit.nimi, arvosana FROM Opiskelijat, Kurssit, Suoritukset WHERE Suoritukset.kurssi_id = Kurssit.id AND Suoritukset.opiskelija_id = Opiskelijat.id;

Mallivastaus

SELECT O.nimi, K.nimi, S.arvosana FROM Opiskelijat O, Kurssit K, Suoritukset S WHERE O.id=S.opiskelija_id AND K.id=S.kurssi_id;

Tehtävä 28

Hae kaikista Uolevin suorituksista kurssin nimi ja arvosana.

Taulut

Opiskelijat
idnimi
1Uolevi
2Maija
3Kaaleppi
Kurssit
idnimi
1Ohpe
2Ohja
3Tira
4Lama
Suoritukset
opiskelija_idkurssi_idarvosana
113
124
212
245
334

Haluttu tulos

Ohpe3
Ohja4

Vastauksesi

SELECT Kurssit.nimi, arvosana FROM Opiskelijat, Kurssit, Suoritukset WHERE Suoritukset.kurssi_id = Kurssit.id AND Suoritukset.opiskelija_id = Opiskelijat.id AND Opiskelijat.nimi = 'Uolevi';

Mallivastaus

SELECT K.nimi, S.arvosana FROM Opiskelijat O, Kurssit K, Suoritukset S WHERE O.id=S.opiskelija_id AND K.id=S.kurssi_id AND O.nimi='Uolevi';

Tehtävä 29

Hae kaikista Ohpen suorituksista opiskelijan nimi ja arvosana.

Taulut

Opiskelijat
idnimi
1Uolevi
2Maija
3Kaaleppi
Kurssit
idnimi
1Ohpe
2Ohja
3Tira
4Lama
Suoritukset
opiskelija_idkurssi_idarvosana
113
124
212
245
334

Haluttu tulos

Uolevi3
Maija2

Vastauksesi

SELECT Opiskelijat.nimi, arvosana FROM Opiskelijat, Kurssit, Suoritukset WHERE Suoritukset.kurssi_id = Kurssit.id AND Suoritukset.opiskelija_id = Opiskelijat.id AND Kurssit.nimi = 'Ohpe';

Mallivastaus

SELECT O.nimi, S.arvosana FROM Opiskelijat O, Kurssit K, Suoritukset S WHERE O.id=S.opiskelija_id AND K.id=S.kurssi_id AND K.nimi='Ohpe';

Tehtävä 30

Hae kaikki suoritukset, joissa arvosana on 4 tai 5.

Vastauksesi

SELECT Opiskelijat.nimi, Kurssit.nimi, arvosana FROM Opiskelijat, Kurssit, Suoritukset WHERE Suoritukset.kurssi_id = Kurssit.id AND Suoritukset.opiskelija_id = Opiskelijat.id AND (Suoritukset.arvosana = 4 OR Suoritukset.arvosana = 5);;

Mallivastaus

SELECT O.nimi, K.nimi, S.arvosana FROM Opiskelijat O, Kurssit K, Suoritukset S WHERE O.id=S.opiskelija_id AND K.id=S.kurssi_id AND S.arvosana BETWEEN 4 AND 5;

Tehtävä 31

Hae jokaisesta opiskelijasta suoritusten määrä. Voit olettaa, että jokaisella opiskelijalla on ainakin yksi suoritus.

Taulut

Opiskelijat
idnimi
1Uolevi
2Maija
3Kaaleppi
Kurssit
idnimi
1Ohpe
2Ohja
3Tira
4Lama
Suoritukset
opiskelija_idkurssi_idarvosana
113
124
212
245
334

Haluttu tulos

Uolevi2
Maija2
Kaaleppi1

Vastauksesi

SELECT Opiskelijat.nimi, COUNT(*) FROM Opiskelijat, Kurssit, Suoritukset WHERE Suoritukset.opiskelija_id = Opiskelijat.id AND Suoritukset.kurssi_id = Kurssit.id GROUP BY Opiskelijat.nimi;

Mallivastaus

SELECT O.nimi, COUNT(*) FROM Opiskelijat O, Suoritukset S WHERE O.id=S.opiskelija_id GROUP BY O.id;

Tehtävä 32

Hae jokaisesta opiskelijasta paras suorituksen arvosana. Voit olettaa, että jokaisella opiskelijalla on ainakin yksi suoritus.

Taulut

Opiskelijat
idnimi
1Uolevi
2Maija
3Kaaleppi
Kurssit
idnimi
1Ohpe
2Ohja
3Tira
4Lama
Suoritukset
opiskelija_idkurssi_idarvosana
113
124
212
245
334

Haluttu tulos

Uolevi4
Maija5
Kaaleppi4

Vastauksesi

SELECT Opiskelijat.nimi, MAX(Suoritukset.arvosana) FROM Opiskelijat, Kurssit, Suoritukset WHERE Suoritukset.opiskelija_id = Opiskelijat.id AND Suoritukset.kurssi_id = Kurssit.id GROUP BY Opiskelijat.nimi;

Mallivastaus

SELECT O.nimi, MAX(S.arvosana) FROM Opiskelijat O, Suoritukset S WHERE O.id=S.opiskelija_id GROUP BY O.id;

Tehtävä 33

Hae tiedot kaikista lentoyhteyksistä.

Taulut

Kaupungit
idnimi
1Helsinki
2Tukholma
3Oslo
4Turku
Lennot
idmista_idminne_id
112
213
323
424

Haluttu tulos

HelsinkiTukholma
HelsinkiOslo
TukholmaOslo
TukholmaTurku

Vastauksesi

SELECT mista.nimi, minne.nimi FROM Kaupungit mista, Kaupungit minne, Lennot WHERE Lennot.mista_id = mista.id AND Lennot.minne_id = minne.id;

Mallivastaus

SELECT A.nimi, B.nimi FROM Kaupungit A, Kaupungit B, Lennot L WHERE L.mista_id=A.id AND L.minne_id=B.id;

Tehtävä 34

Hae kohteet kaikista lennoista, jotka lähtevät Helsingistä.

Taulut

Kaupungit
idnimi
1Helsinki
2Tukholma
3Oslo
4Turku
Lennot
idmista_idminne_id
112
213
323
424

Haluttu tulos

Tukholma
Oslo

Vastauksesi

SELECT k2.nimi AS minne
FROM Lennot, Kaupungit AS k1, Kaupungit AS k2
WHERE Lennot.mista_id = k1.id
AND Lennot.minne_id = k2.id AND k1.nimi = 'Helsinki'
ORDER BY Lennot.mista_id;

Mallivastaus

SELECT B.nimi FROM Kaupungit A, Kaupungit B, Lennot L WHERE L.mista_id=A.id AND L.minne_id=B.id AND A.nimi='Helsinki';

Tehtävä 35

Ilmoita jokaisesta pelaajasta, montako tulosta hänellä on (myös vaikka ei olisi tuloksia).

Taulut

Pelaajat
idnimi
1Uolevi
2Maija
3Kaaleppi
Tulokset
idpelaaja_idtulos
11250
21300
32100
42350
52500

Haluttu tulos

Uolevi2
Maija3
Kaaleppi0

Vastauksesi

SELECT Pelaajat.nimi, (SELECT COUNT(*) FROM Tulokset
WHERE Pelaajat.id = Tulokset.pelaaja_id)
FROM Pelaajat;

Mallivastaus

SELECT P.nimi, COUNT(T.tulos) FROM Pelaajat P LEFT JOIN Tulokset T ON P.id=T.pelaaja_id GROUP BY P.id;

Tehtävä 36

Hae jokaisesta opiskelijasta suoritusten määrä (myös vaikka ei olisi suorituksia).

Taulut

Opiskelijat
idnimi
1Uolevi
2Maija
3Kaaleppi
Kurssit
idnimi
1Ohpe
2Ohja
3Tira
4Lama
Suoritukset
opiskelija_idkurssi_idarvosana
113
124
212
234
245

Haluttu tulos

Uolevi2
Maija3
Kaaleppi0

Vastauksesi

SELECT Opiskelijat.nimi, (SELECT COUNT(*) FROM Suoritukset
WHERE Opiskelijat.id = Suoritukset.opiskelija_id)
FROM Opiskelijat;

Mallivastaus

SELECT O.nimi, COUNT(S.arvosana) FROM Opiskelijat O LEFT JOIN Suoritukset S ON O.id=S.opiskelija_id GROUP BY O.id;

Tehtävä 37

Hae jokaisesta kurssista suorittajien määrä (myös vaikka ei olisi suorituksia).

Taulut

Opiskelijat
idnimi
1Uolevi
2Maija
3Kaaleppi
Kurssit
idnimi
1Ohpe
2Ohja
3Tira
4Lama
Suoritukset
opiskelija_idkurssi_idarvosana
113
124
212
225
344

Haluttu tulos

Ohpe2
Ohja2
Tira0
Lama1

Vastauksesi

SELECT Kurssit.nimi, (SELECT COUNT(*) FROM Suoritukset
WHERE Kurssit.id = Suoritukset.kurssi_id)
FROM Kurssit;

Mallivastaus

SELECT K.nimi, COUNT(S.arvosana) FROM Kurssit K LEFT JOIN Suoritukset S ON K.id=S.kurssi_id GROUP BY K.id;

Tehtävä 38

Hae nimet kaikista kursseista, joita on suoritettu ainakin kerran.

Taulut

Opiskelijat
idnimi
1Uolevi
2Maija
3Kaaleppi
Kurssit
idnimi
1Ohpe
2Ohja
3Tira
4Lama
Suoritukset
opiskelija_idkurssi_idarvosana
113
124
212
225
344

Haluttu tulos

Ohpe
Ohja
Lama

Vastauksesi

SELECT DISTINCT Kurssit.nimi
FROM Opiskelijat, Kurssit, Suoritukset
WHERE Opiskelijat.id = Suoritukset.opiskelija_id
AND Kurssit.id = Suoritukset.kurssi_id
ORDER BY Suoritukset.arvosana;

Mallivastaus

SELECT DISTINCT K.nimi FROM Kurssit K, Suoritukset S WHERE K.id=S.kurssi_id;

Tehtävä 39

Hae nimet kaikista kursseista, joita ei ole suoritettu kertaakaan.

Taulut

Opiskelijat
idnimi
1Uolevi
2Maija
3Kaaleppi
Kurssit
idnimi
1Ohpe
2Ohja
3Tira
4Lama
Suoritukset
opiskelija_idkurssi_idarvosana
113
124
212
225
344

Haluttu tulos

Tira

Vastauksesi

SELECT Kurssit.nimi FROM Kurssit
LEFT JOIN Suoritukset ON Kurssit.id = Suoritukset.kurssi_id
WHERE Suoritukset.kurssi_id IS NULL;

Mallivastaus

SELECT K.nimi FROM Kurssit K LEFT JOIN Suoritukset S ON K.id=S.kurssi_id GROUP BY K.id HAVING COUNT(S.arvosana)=0;

Tehtävä 40

Hae jokaisesta kaupungista, montako lentoa sieltä lähtee (myös vaikka ei olisi lentoja).

Taulut

Kaupungit
idnimi
1Helsinki
2Tukholma
3Oslo
4Turku
Lennot
idmista_idminne_id
112
213
323
434

Haluttu tulos

Helsinki2
Tukholma1
Oslo1
Turku0

Vastauksesi

SELECT Kaupungit.nimi, (SELECT COUNT(*) FROM Lennot
WHERE Kaupungit.id = Lennot.mista_id)
FROM Kaupungit;

Mallivastaus

SELECT K.nimi, COUNT(L.minne_id) FROM Kaupungit K LEFT JOIN Lennot L ON K.id=L.mista_id GROUP BY K.id;

Tehtävä 41

Hae jokaisen tuotteen hinta kaksinkertaisena.

Taulut

Tuotteet
idnimihinta
1selleri5
2lanttu8
3nauris6
4porkkana2

Haluttu tulos

selleri10
lanttu16
nauris12
porkkana4

Vastauksesi

SELECT Tuotteet.nimi, (Tuotteet.hinta * 2) FROM Tuotteet;

Mallivastaus

SELECT nimi, hinta*2 FROM Tuotteet;

Tehtävä 42

Hae kaikki tuotteet, joiden hinta on parillinen.

Taulut

Tuotteet
idnimihinta
1selleri5
2lanttu8
3nauris7
4porkkana2

Haluttu tulos

lanttu8
porkkana2

Vastauksesi

SELECT Tuotteet.nimi, Tuotteet.hinta
FROM Tuotteet WHERE (Tuotteet.hinta % 2 == 0);

Mallivastaus

SELECT nimi, hinta FROM Tuotteet WHERE hinta%2=0;

Tehtävä 43

Hae jokaisen sanan pituus merkkeinä.

Taulut

Sanat
idsana
1apina
2banaani
3cembalo

Haluttu tulos

apina5
banaani7
cembalo7

Vastauksesi

SELECT sana, LENGTH(sana) FROM Sanat;

Mallivastaus

SELECT sana, LENGTH(sana) FROM Sanat;

Tehtävä 44

Hae kaikki sanat, joiden pituus on alle 6 merkkiä.

Taulut

Sanat
idsana
1apina
2banaani
3cembalo

Haluttu tulos

apina

Vastauksesi

SELECT Sanat.sana FROM Sanat WHERE LENGTH(sana) <  6;

Mallivastaus

SELECT sana FROM Sanat WHERE LENGTH(sana)<6;

Tehtävä 45

Hae sanat järjestettynä ensisijaisesti pituuden mukaan ja toissijaisesti aakkosjärjestyksen mukaan.

Vastauksesi

SELECT Sanat.sana FROM Sanat ORDER BY LENGTH(Sanat.sana), Sanat.sana;

Mallivastaus

SELECT sana FROM Sanat ORDER BY LENGTH(sana), sana;

Tehtävä 46

Hae käyttäjien koko nimet yhtenä sarakkeena.

Taulut

Kayttajat
idetunimisukunimi
1LiisaVirtanen
2AnnaKorhonen
3KalleOjala

Haluttu tulos

Liisa Virtanen
Anna Korhonen
Kalle Ojala

Vastauksesi

SELECT etunimi || ' ' || sukunimi FROM Kayttajat;

Mallivastaus

SELECT etunimi || ' ' || sukunimi FROM Kayttajat;

Tehtävä 47

Hae kaikkien sanojen yhteispituus.

Taulut

Sanat
idsana
1apina
2banaani
3cembalo

Haluttu tulos

19

Vastauksesi

SELECT SUM(LENGTH(sana)) FROM Sanat;

Mallivastaus

SELECT SUM(LENGTH(sana)) FROM Sanat;

Tehtävä 48

Laske jokaisen tilauksen yhteishinta.

Taulut

Tilaukset
idtuotehintamaara
1lanttu410
2selleri720
3nauris515

Haluttu tulos

lanttu40
selleri140
nauris75

Vastauksesi

SELECT Tilaukset.tuote,
       (Tilaukset.hinta * Tilaukset.maara)
  FROM Tilaukset;

Mallivastaus

SELECT tuote, hinta*maara FROM Tilaukset;

Tehtävä 49

Laske kaikkien tilausten yhteishintojen summa.

Taulut

Tilaukset
idtuotehintamaara
1lanttu410
2selleri720
3nauris515

Haluttu tulos

255

Vastauksesi

SELECT SUM(hinta *maara) FROM Tilaukset;

Mallivastaus

SELECT SUM(hinta*maara) FROM Tilaukset;

Tehtävä 50

Hae kaikkien elokuvien nimet, jotka on julkaistu karkausvuonna. (Vuosi on karkausvuosi, jos se on jaollinen 4:llä. Jos vuosi on jaollinen 100:lla, se on karkausvuosi vain, jos se on myös jaollinen 400:lla.)

Taulut

Elokuvat
idnimivuosi
1Lumikki1937
2Fantasia1940
3Pinocchio1940
4Dumbo1941
5Bambi1942

Haluttu tulos

Fantasia
Pinocchio

Vastauksesi

SELECT Elokuvat.nimi FROM Elokuvat WHERE (Elokuvat.vuosi % 4 == 0 AND Elokuvat.vuosi % 100
IS NOT 0 OR Elokuvat.vuosi % 400 == 0);

Mallivastaus

SELECT nimi FROM Elokuvat WHERE vuosi%4=0 AND (vuosi%100<>0 OR vuosi%400=0);

Tehtävä 51

Hae kaikki tuotteet, joiden hinta on halvin hinta.

Taulut

Tuotteet
idnimihinta
1selleri7
2lanttu5
3retiisi8
4nauris5

Haluttu tulos

lanttu
nauris

Vastauksesi

SELECT Tuotteet.nimi FROM Tuotteet
WHERE Tuotteet.hinta IN (SELECT MIN(Tuotteet.hinta) FROM Tuotteet);

Mallivastaus

SELECT nimi FROM Tuotteet WHERE hinta=(SELECT MIN(hinta) FROM Tuotteet);

Tehtävä 52

Hae kaikki tuotteet, joiden hinta on enintään kaksinkertainen halvimpaan hintaan verrattuna.

Taulut

Tuotteet
idnimihinta
1selleri7
2lanttu3
3retiisi5
4nauris6

Haluttu tulos

lanttu
retiisi
nauris

Vastauksesi

SELECT Tuotteet.nimi FROM Tuotteet
WHERE Tuotteet.hinta <=
((SELECT MIN(Tuotteet.hinta) FROM Tuotteet) * 2);

Mallivastaus

SELECT nimi FROM Tuotteet WHERE hinta <= 2*(SELECT MIN(hinta) FROM Tuotteet);

Tehtävä 53

Hae kaikki tuotteet, joiden hintaa ei ole millään muulla tuotteella.

Taulut

Tuotteet
idnimihinta
1selleri5
2lanttu3
3retiisi5
4nauris6

Haluttu tulos

lanttu
nauris

Vastauksesi

SELECT t1.nimi
FROM Tuotteet t1
WHERE t1.hinta
NOT IN (SELECT t2.hinta
    FROM Tuotteet t2
    WHERE t2.id <> t1.id);

Mallivastaus

SELECT nimi FROM Tuotteet WHERE hinta IN (SELECT hinta FROM Tuotteet GROUP BY hinta HAVING COUNT(*)=1);

Tehtävä 54

Hae aakkosjärjestyksessä ensimmäinen sana.

Taulut

Sanat
idsana
1apina
2banaani
3cembalo

Haluttu tulos

apina

Vastauksesi

SELECT sana FROM Sanat ORDER BY sana LIMIT 1;

Mallivastaus

SELECT MIN(sana) FROM Sanat;

Tehtävä 55

Hae aakkosjärjestyksessä toinen sana. Voit olettaa, että taulussa ei ole kahta samaa sanaa.

Vastauksesi

SELECT sana FROM Sanat ORDER BY sana LIMIT 1 OFFSET 1;

Mallivastaus

SELECT sana FROM Sanat ORDER BY sana LIMIT 1 OFFSET 1;

Tehtävä 56

Hae kaikki sanat paitsi aakkosjärjestyksessä ensimmäinen. Voit olettaa, että taulussa ei ole kahta samaa sanaa.

Taulut

Sanat
idsana
1apina
2banaani
3cembalo

Haluttu tulos

banaani
cembalo

Vastauksesi

SELECT sana FROM Sanat ORDER BY sana LIMIT 10 OFFSET 1;

Mallivastaus

SELECT sana FROM Sanat ORDER BY sana LIMIT (SELECT COUNT(*)-1 FROM Sanat) OFFSET 1;

Tehtävä 57

Hae kaikki sanat, joissa esiintyy i-kirjain.

Vastauksesi

SELECT sana FROM Sanat WHERE sana LIKE '%i%';

Mallivastaus

SELECT sana FROM Sanat WHERE sana LIKE '%i%';

Tehtävä 58

Hae kaikki sanat, jotka alkavat a-kirjaimella.

Taulut

Sanat
idsana
1apina
2banaani
3cembalo

Haluttu tulos

apina

Vastauksesi

SELECT sana FROM Sanat WHERE sana LIKE 'a%';

Mallivastaus

SELECT sana FROM Sanat WHERE sana LIKE 'a%';

Tehtävä 59

Hae kaikki sanat, joissa on tasan viisi kirjainta ja toinen kirjain on p.

Taulut

Sanat
idsana
1apina
2banaani
3cembalo

Haluttu tulos

apina

Vastauksesi

SELECT Sanat.sana
FROM Sanat
WHERE LENGTH(Sanat.sana) = 5
AND Sanat.sana LIKE '%p%%%';

Mallivastaus

SELECT sana FROM Sanat WHERE sana LIKE '_p___';

Tehtävä 60

Hae kaikki sanat, joissa on tasan kaksi a-kirjainta.

Vastauksesi

SELECT Sanat.sana FROM Sanat WHERE (LENGTH(Sanat.sana) - LENGTH(REPLACE(Sanat.sana, 'a', '')) = 2);

Mallivastaus

SELECT sana FROM Sanat WHERE sana LIKE '%a%a%' AND sana NOT LIKE '%a%a%a%';

Tehtävä 61

Hae jokaisesta käyttäjästä tieto, monessako ryhmässä hän on.

Taulut

Kayttajat
idtunnus
1uolevi
2maija
3kaaleppi
4liisa
Ryhmat
idnimi
1puput
2kilit
Oikeudet
kayttaja_idryhma_id
11
21
31
32

Haluttu tulos

uolevi1
maija1
kaaleppi2
liisa0

Vastauksesi

SELECT Kayttajat.tunnus, (SELECT COUNT(*) 
    FROM Oikeudet, Ryhmat
    WHERE Kayttajat.id = Oikeudet.kayttaja_id
    AND Oikeudet.ryhma_id = Ryhmat.id)
    FROM Kayttajat

Mallivastaus

SELECT K.tunnus, COUNT(O.ryhma_id) FROM Kayttajat K LEFT JOIN Oikeudet O ON K.id=O.kayttaja_id GROUP BY K.id;

Tehtävä 62

Hae jokaisesta ryhmästä tieto, montako käyttäjää siihen kuuluu.

Vastauksesi

SELECT Ryhmat.nimi, (SELECT COUNT(Oikeudet.ryhma_id)
FROM Oikeudet WHERE Oikeudet.ryhma_id = Ryhmat.id) FROM Ryhmat;

Mallivastaus

SELECT R.nimi, COUNT(O.kayttaja_id) FROM Ryhmat R LEFT JOIN Oikeudet O ON R.id=O.ryhma_id GROUP BY R.id;

Tehtävä 63

Hae kaikki käyttäjät, jotka kuuluvat yli yhteen ryhmään.

Taulut

Kayttajat
idtunnus
1uolevi
2maija
3kaaleppi
4liisa
Ryhmat
idnimi
1puput
2kilit
Oikeudet
kayttaja_idryhma_id
11
21
31
32

Haluttu tulos

kaaleppi

Vastauksesi

SELECT Kayttajat.tunnus
FROM Kayttajat
WHERE ((SELECT COUNT(Oikeudet.kayttaja_id)
FROM Oikeudet WHERE Oikeudet.kayttaja_id = Kayttajat.id) >= 2);

Mallivastaus

SELECT K.tunnus FROM Kayttajat K LEFT JOIN Oikeudet O ON K.id=O.kayttaja_id GROUP BY K.id HAVING COUNT(O.ryhma_id) > 1;

Tehtävä 64

Hae kaikki käyttäjät, jotka kuuluvat ainakin yhteen samaan ryhmään käyttäjän "uolevi" kanssa.

Taulut

Kayttajat
idtunnus
1uolevi
2maija
3kaaleppi
4liisa
Ryhmat
idnimi
1puput
2kilit
Oikeudet
kayttaja_idryhma_id
11
12
21
42

Haluttu tulos

uolevi
maija
liisa

Vastauksesi

SELECT Kayttajat.tunnus
FROM Kayttajat WHERE Kayttajat.id
IN (SELECT Oikeudet.kayttaja_id FROM Oikeudet WHERE Oikeudet.ryhma_id
 IN (SELECT Oikeudet.ryhma_id FROM Oikeudet WHERE Oikeudet.kayttaja_id = 1));

Mallivastaus

SELECT DISTINCT A.tunnus FROM Kayttajat A, Kayttajat B, Oikeudet X, Oikeudet Y WHERE A.id=X.kayttaja_id AND B.id=Y.kayttaja_id AND X.ryhma_id=Y.ryhma_id AND B.tunnus='uolevi';

Tehtävä 65

Hae kaikki käyttäjät, jotka eivät kuulu mihinkään samaan ryhmään käyttäjän "uolevi" kanssa.

Taulut

Kayttajat
idtunnus
1uolevi
2maija
3kaaleppi
4liisa
Ryhmat
idnimi
1puput
2kilit
Oikeudet
kayttaja_idryhma_id
11
12
21
42

Haluttu tulos

kaaleppi

Vastauksesi

SELECT Kayttajat.tunnus FROM Kayttajat WHERE Kayttajat.id
NOT IN (SELECT Oikeudet.kayttaja_id FROM Oikeudet WHERE Oikeudet.ryhma_id
  IN (SELECT Oikeudet.ryhma_id FROM Oikeudet, Kayttajat WHERE Oikeudet.kayttaja_id == 1));

Mallivastaus

SELECT tunnus FROM Kayttajat WHERE tunnus NOT IN (SELECT A.tunnus FROM Kayttajat A, Kayttajat B, Oikeudet X, Oikeudet Y WHERE A.id=X.kayttaja_id AND B.id=Y.kayttaja_id AND X.ryhma_id=Y.ryhma_id AND B.tunnus='uolevi');

Tehtävä 66

Hae sanat järjestettynä niin, että kirjainkoolla ei ole merkitystä. Jokainen sana muodostuu kirjaimista a–z ja A–Z.

Taulut

Sanat
idsana
1Liisa
2Maija
3Uolevi
4apina
5omena

Haluttu tulos

apina
Liisa
Maija
omena
Uolevi

Vastauksesi

SELECT sana FROM Sanat ORDER BY LOWER(sana);

Mallivastaus

SELECT sana FROM Sanat ORDER BY LOWER(sana);

Tehtävä 67

Hae tuote, jonka hinta on halvin (jos halvimpia tuotteita on useita, valitse aakkosjärjestyksessä ensimmäinen).

Taulut

Tuotteet
idnimihinta
1selleri7
2lanttu5
3retiisi8
4nauris5

Haluttu tulos

lanttu5

Vastauksesi

SELECT Tuotteet.nimi, Tuotteet.hinta
FROM Tuotteet
WHERE Tuotteet.hinta =
(SELECT MIN
 (Tuotteet.hinta)
 FROM Tuotteet
 GROUP BY hinta)
ORDER BY nimi
LIMIT 1;

Mallivastaus

SELECT nimi, hinta FROM Tuotteet ORDER BY hinta, nimi LIMIT 1;

Tehtävä 68

Hae jokaisesta tuotteesta tieto, monenko tuotteen hinta eroaa enintään yhdellä (tässä lasketaan mukaan myös tuote itse).

Taulut

Tuotteet
idnimihinta
1selleri7
2lanttu4
3retiisi8
4nauris6

Haluttu tulos

selleri3
lanttu1
retiisi2
nauris2

Vastauksesi

SELECT Tuotteet.nimi, COUNT(*)
  FROM Tuotteet, Tuotteet t3
  WHERE Tuotteet.id IN (SELECT t2.id 
     FROM Tuotteet t2 WHERE ABS(Tuotteet.hinta-t3.hinta) <=1)
GROUP BY Tuotteet.nimi;

Mallivastaus

SELECT A.nimi, COUNT(*) FROM Tuotteet A, Tuotteet B WHERE ABS(A.hinta-B.hinta) <= 1 GROUP BY A.id;

Tehtävä 69

Laske, monellako tavalla voit valita kaksi tuotetta niin, että yhteishinta on tasan 10.

Huom! Yhdistelmässä voi olla kaksi samaa tuotetta ja halutaan laskea erilaiset yhdistelmät. Esimerkissä yhdistelmät ovat selleri+selleri ja lanttu+nauris (eli nauris+lanttu ei ole mukana).

Taulut

Tuotteet
idnimihinta
1selleri5
2lanttu3
3retiisi8
4nauris7

Haluttu tulos

2

Vastauksesi

SELECT COUNT(n1)
FROM
(
 SELECT t1.nimi n1, t2.nimi n2
 FROM Tuotteet t1, Tuotteet t2
 WHERE t1.hinta + t2.hinta == 10
 AND t1.nimi <= t2.nimi
);

Mallivastaus

SELECT COUNT(*) FROM Tuotteet A, Tuotteet B WHERE A.hinta+B.hinta=10 AND A.id <= B.id;

Tehtävä 70

Laske, mikä on pienin ero kahden tuotteen hinnassa.

Taulut

Tuotteet
idnimihinta
1selleri5
2lanttu3
3retiisi8
4nauris7

Haluttu tulos

1

Vastauksesi

SELECT MIN(ABS(hinta1 - hinta2)) 
FROM (SELECT t1.id AS id1, t2.id AS id2, t1.hinta AS hinta1, t2.hinta AS hinta2 
   FROM Tuotteet t1, Tuotteet t2 
   WHERE id1!=id2);

Mallivastaus

SELECT MIN(ABS(A.hinta-B.hinta)) FROM Tuotteet A, Tuotteet B WHERE A.id<>B.id;

Tehtävä 71

Laske jokaisen tilin saldo tapahtumien perusteella (jokaisen tilin saldo on aluksi 0).

Taulut

Tilit
idhaltija
1Uolevi
2Maija
3Kaaleppi
Tapahtumat
idtili_idmuutos
11500
22300
31-100
42100
52-300

Haluttu tulos

Uolevi400
Maija100
Kaaleppi0

Vastauksesi

SELECT haltija, COALESCE(tilisumma, 0) FROM (SELECT Tilit.haltija, tilisumma FROM (Tilit LEFT JOIN (SELECT t1.tili_id AS tili1, SUM(t1.muutos) AS tilisumma FROM Tapahtumat t1 GROUP BY t1.tili_id) ON Tilit.id = tili1) GROUP BY Tilit.id);

Mallivastaus

SELECT A.haltija, IFNULL(SUM(B.muutos),0) FROM Tilit A LEFT JOIN Tapahtumat B ON A.id=B.tili_id GROUP BY A.id;

Tehtävä 72

Laske Uolevin tilin saldon historia. Tapahtumat ovat järjestyksessä id:n mukaisesti.

Vastauksesi

SELECT SUM(Tapahmtos) 
OVER ( ORDER BY TapahID ) 
FROM (SELECT Tapahtumat.id AS tapahID, Tapahtumat.muutos AS Tapahmtos 
    FROM Tapahtumat, Tilit 
    WHERE Tilit.id = Tapahtumat.tili_id 
    AND Tilit.haltija = 'Uolevi');

Mallivastaus

SELECT SUM(B.muutos) FROM Tilit T, Tapahtumat A, Tapahtumat B WHERE A.tili_id=T.id AND B.tili_id=T.id AND T.haltija="Uolevi" AND B.id<=A.id GROUP BY A.id;

Tehtävä 73

Laske jokaisen tilin suurin saldo historian aikana (jokaisen tilin saldo on aluksi 0).

Taulut

Tilit
idhaltija
1Uolevi
2Maija
3Kaaleppi
Tapahtumat
idtili_idmuutos
11500
22300
31-100
42100
52-300

Haluttu tulos

Uolevi500
Maija400
Kaaleppi0

Vastauksesi

SELECT haltija, MAX(tili) FROM (SELECT Tilit.haltija haltija, COALESCE(SUM(taph2.muutos),0) tili
FROM Tilit LEFT JOIN Tapahtumat taph1 ON Tilit.id = taph1.tili_id
LEFT JOIN Tapahtumat taph2 ON taph2.id <= taph1.id AND Tilit.id = taph2.tili_id GROUP BY taph1.id, haltija ORDER BY tili DESC) GROUP BY haltija ORDER BY tili DESC;

Mallivastaus

SELECT haltija, IFNULL((SELECT MAX((SELECT SUM(muutos) FROM Tapahtumat WHERE tili_id=B.id AND id <= A.id)) FROM Tapahtumat A),0) FROM Tilit B;

Tehtävä 74

Laske, montako eri tehtävää kukin opiskelija on ratkaissut oikein (lähetyksen tila on 0 = väärin tai 1 = oikein).

Taulut

Opiskelijat
idnimi
1Uolevi
2Maija
3Kaaleppi
Tehtavat
idnimi
1T1
2T2
3T3
Lahetykset
idopiskelija_idtehtava_idtila
1110
2110
3211
4120
5111
6221
7230
8120
9121
10221
11221

Haluttu tulos

Uolevi2
Maija2
Kaaleppi0

Vastauksesi

SELECT Opiskelijat.nimi, COUNT(DISTINCT Lahetykset.tehtava_id)
FROM Opiskelijat LEFT JOIN Lahetykset ON (Opiskelijat.id = Lahetykset.opiskelija_id
AND Lahetykset.tila=1) GROUP BY Opiskelijat.id;

Mallivastaus

SELECT O.nimi, COUNT(DISTINCT L.tehtava_id) FROM Opiskelijat O LEFT JOIN Lahetykset L ON O.id=L.opiskelija_id AND L.tila=1 GROUP BY O.id;

Tehtävä 75

Laske jokaiselle opiskelijalle, montako lähetystä enimmillään hän on lähettänyt samaan tehtävään.

Taulut

Opiskelijat
idnimi
1Uolevi
2Maija
3Kaaleppi
Tehtavat
idnimi
1T1
2T2
3T3
Lahetykset
idopiskelija_idtehtava_idtila
1110
2211
3120
4111
5221
6230
7120
8221
9221

Haluttu tulos

Uolevi2
Maija3
Kaaleppi0

Vastauksesi

SELECT Opiskelijat.nimi, COALESCE((SELECT COUNT(Lahetykset.tehtava_id) tulos FROM Lahetykset, Tehtavat WHERE 
Lahetykset.opiskelija_id = Opiskelijat.id AND Lahetykset.tehtava_id = Tehtavat.id GROUP BY Lahetykset.tehtava_id ORDER BY tulos DESC), 0) FROM Opiskelijat;

Mallivastaus

SELECT nimi, IFNULL((SELECT MAX(maara) FROM (SELECT COUNT(*) maara FROM Lahetykset WHERE opiskelija_id=O.id GROUP BY tehtava_id)),0) FROM Opiskelijat O;

Tehtävä 76

Laske tulosten moodi (eli yleisin tulos). Jos vaihtoehtoja on useita, valitse niistä pienin.

Taulut

Tulokset
idtulos
12
22
33
45
55
65
76

Haluttu tulos

5

Vastauksesi

SELECT tulos
FROM Tulokset
GROUP BY Tulokset.tulos
ORDER BY COUNT(*) DESC, tulos ASC LIMIT 1;

Mallivastaus

SELECT tulos FROM Tulokset GROUP BY tulos ORDER BY COUNT(*) DESC, tulos LIMIT 1;

Tehtävä 77

Laske tulosten mediaani (eli keskimmäinen tulos, kun tulokset on järjestetty pienimmästä suurimpaan). Voit olettaa, että tulosten määrä on pariton.

Taulut

Tulokset
idtulos
15
22
33
45
52
66
75

Haluttu tulos

5

Vastauksesi

SELECT Tulokset.tulos FROM Tulokset ORDER BY tulos LIMIT 1
OFFSET (SELECT COUNT(*) FROM Tulokset) / 2;

Mallivastaus

SELECT tulos FROM Tulokset ORDER BY tulos LIMIT 1 OFFSET (SELECT COUNT(*)/2 FROM Tulokset);

Tehtävä 78

Laske tulosten mediaani (eli keskimmäinen tulos, kun tulokset on järjestetty pienimmästä suurimpaan). Jos tulosten määrä on parillinen, tulosta keskikohdan vasemmalla puolella oleva tulos.

Taulut

Tulokset
idtulos
13
22
37
43
54
67

Haluttu tulos

3

Vastauksesi

SELECT x.tulos FROM (SELECT tulos, COUNT(1) OVER (partition BY 'A') AS TotalRows, Row_number()
OVER (ORDER BY Tulos aSC) AS AmountOrder FROM Tulokset ft) x 
WHERE x.AmountOrder = ROUND(x.TotalRows / 2.0, 0);

Mallivastaus

SELECT tulos FROM Tulokset ORDER BY tulos LIMIT 1 OFFSET (SELECT (COUNT(*)-1)/2 FROM Tulokset);

Tehtävä 79

Ilmoita jokaisesta junan vaunusta, montako matkustajaa siellä on.

Taulut

Vaunut
idnimipaikat
1vaunu110
2vaunu210
3vaunu310
4vaunu410
Matkustajat
idnimivaunu_id
1Uolevi1
2Maija1
3Kaaleppi2
4Kotivalo4
5Justiina4
6Vihtori4

Haluttu tulos

vaunu12
vaunu21
vaunu30
vaunu43

Vastauksesi

SELECT Vaunut.nimi,
(
 SELECT COUNT(Matkustajat.vaunu_id)
 FROM Matkustajat
WHERE Matkustajat.vaunu_id = Vaunut.id
)
  FROM Vaunut;

Mallivastaus

SELECT V.nimi, COUNT(M.id) FROM Vaunut V LEFT JOIN Matkustajat M ON V.id=M.vaunu_id GROUP BY V.id;

Tehtävä 80

Ilmoita jokaisesta junan vaunusta, montako tyhjää paikkaa siellä on.

Taulut

Vaunut
idnimipaikat
1vaunu110
2vaunu210
3vaunu310
4vaunu410
Matkustajat
idnimivaunu_id
1Uolevi1
2Maija1
3Kaaleppi2
4Kotivalo4
5Justiina4
6Vihtori4

Haluttu tulos

vaunu18
vaunu29
vaunu310
vaunu47

Vastauksesi

SELECT Vaunut.nimi, (Vaunut.paikat - (SELECT COUNT(Matkustajat.vaunu_id) FROM Matkustajat
WHERE Matkustajat.vaunu_id = Vaunut.id)) FROM Vaunut;

Mallivastaus

SELECT V.nimi, V.paikat-COUNT(M.id) FROM Vaunut V LEFT JOIN Matkustajat M ON V.id=M.vaunu_id GROUP BY V.id;

Tehtävä 81

Laske, montako tyhjää paikkaa junassa on kaikkiaan.

Taulut

Vaunut
idnimipaikat
1vaunu110
2vaunu210
3vaunu310
4vaunu410
Matkustajat
idnimivaunu_id
1Uolevi1
2Maija1
3Kaaleppi2
4Kotivalo4
5Justiina4
6Vihtori4

Haluttu tulos

34

Vastauksesi

SELECT SUM(Vaunut.paikat - (SELECT COUNT(Matkustajat.vaunu_id) FROM Matkustajat
WHERE Matkustajat.vaunu_id = Vaunut.id)) FROM Vaunut;

Mallivastaus

SELECT (SELECT SUM(paikat) FROM vaunut)-(SELECT COUNT(*) FROM Matkustajat);

Tehtävä 82

Hae jokaisesta matkustajasta tieto, montako muuta matkustajaa on samassa vaunussa.

Taulut

Vaunut
idnimipaikat
1vaunu110
2vaunu210
3vaunu310
4vaunu410
Matkustajat
idnimivaunu_id
1Uolevi1
2Maija1
3Kaaleppi2
4Kotivalo4
5Justiina4
6Vihtori4

Haluttu tulos

Uolevi1
Maija1
Kaaleppi0
Kotivalo2
Justiina2
Vihtori2

Vastauksesi

SELECT nimi, COUNT(n1) FROM Matkustajat LEFT JOIN (SELECT m1.nimi AS n1, m2.nimi AS n2
FROM Matkustajat m1, Matkustajat m2 WHERE (m1.vaunu_id=m2.vaunu_id AND m1.nimi != m2.nimi)) ON nimi=n1 GROUP BY n1 ORDER BY id;

Mallivastaus

SELECT A.nimi, COUNT(*)-1 FROM Matkustajat A, Matkustajat B WHERE A.vaunu_id=B.vaunu_id GROUP BY A.id;

Tehtävä 83

Hae kaikki matkustajat, jotka ovat yksin vaunussaan.

Taulut

Vaunut
idnimipaikat
1vaunu110
2vaunu210
3vaunu310
4vaunu410
Matkustajat
idnimivaunu_id
1Uolevi1
2Maija1
3Kaaleppi2
4Kotivalo4
5Justiina4
6Vihtori4

Haluttu tulos

Kaaleppi

Vastauksesi

SELECT A.nimi FROM Matkustajat A, Matkustajat B WHERE A.vaunu_id=B.vaunu_id GROUP BY A.id HAVING COUNT(*)-1 = 0;

Mallivastaus

SELECT A.nimi FROM Matkustajat A, Matkustajat B WHERE A.vaunu_id=B.vaunu_id GROUP BY A.id HAVING COUNT(*)=1;

Tehtävä 84

Hae kaikki vaunut, joissa ei ole yhtään matkustajaa.

Taulut

Vaunut
idnimipaikat
1vaunu110
2vaunu210
3vaunu310
4vaunu410
Matkustajat
idnimivaunu_id
1Uolevi1
2Maija1
3Kaaleppi2
4Kotivalo4
5Justiina4
6Vihtori4

Haluttu tulos

vaunu3

Vastauksesi

SELECT Vaunut.nimi FROM Vaunut WHERE((SELECT COUNT(*) FROM Matkustajat 
WHERE Vaunut.id = Matkustajat.vaunu_id) == 0);

Mallivastaus

SELECT V.nimi FROM Vaunut V LEFT JOIN Matkustajat M ON V.id=M.vaunu_id GROUP BY V.id HAVING COUNT(M.id)=0;

Tehtävä 85

Laske, monellako tavalla voidaan valita kaksi matkustajaa, jotka ovat samassa vaunussa.

Taulut

Vaunut
idnimipaikat
1vaunu110
2vaunu210
3vaunu310
4vaunu410
Matkustajat
idnimivaunu_id
1Uolevi1
2Maija1
3Kaaleppi2
4Kotivalo4
5Justiina4
6Vihtori4

Haluttu tulos

4

Vastauksesi

SELECT COUNT(*)/2 FROM (SELECT M1.nimi, M2.nimi FROM Matkustajat M1, Matkustajat
 M2 WHERE M1.vaunu_id = M2.vaunu_id AND M1.nimi != M2.nimi);

Mallivastaus

SELECT COUNT(*) FROM Matkustajat A, Matkustajat B WHERE A.id<B.id AND A.vaunu_id=B.vaunu_id;

Tehtävä 86

Hae jokaisesta paketista tuotteiden määrä ja eri tuotteiden määrä.

Taulut

Tuotteet
idnimihinta
1selleri7
2lanttu3
3retiisi5
4nauris6
Paketit
idnimihinta
1Mummon herkut10
2Kolmikko14
Sisallot
paketti_idtuote_id
11
14
23
23
23

Haluttu tulos

Mummon herkut22
Kolmikko31

Vastauksesi

SELECT asetelma.nimi, COUNT(asetelma.tuote_id), COUNT(DISTINCT asetelma.tuote_id)
FROM (Paketit 
LEFT JOIN Sisallot 
ON Paketit.id = Sisallot.paketti_id) asetelma 
GROUP BY asetelma.nimi;

Mallivastaus

SELECT P.nimi, COUNT(S.tuote_id), COUNT(DISTINCT S.tuote_id) FROM Paketit P LEFT JOIN Sisallot S ON P.id=S.paketti_id GROUP BY P.id;

Tehtävä 89

Hae jokaisesta tuotteesta tieto, montako kertaa se esiintyy enimmillään samassa paketissa.

Taulut

Tuotteet
idnimihinta
1selleri7
2lanttu3
3retiisi5
4nauris6
Paketit
idnimihinta
1Mummon herkut10
2Papan herkut10
Sisallot
paketti_idtuote_id
11
14
23
23
24

Haluttu tulos

selleri1
lanttu0
retiisi2
nauris1

Vastauksesi

SELECT Tuotteet.nimi, COALESCE((SELECT COUNT(*) tulos FROM Sisallot, Paketit WHERE 
Sisallot.paketti_id = Paketit.id AND Sisallot.tuote_id = Tuotteet.id GROUP BY Sisallot.paketti_id ORDER BY Sisallot.paketti_id DESC), 0) FROM Tuotteet;

Mallivastaus

SELECT nimi, IFNULL((SELECT MAX(maara) FROM (SELECT COUNT(*) maara FROM Sisallot WHERE tuote_id=T.id GROUP BY paketti_id)),0) FROM Tuotteet T;

Tehtävä 90

Muodosta tuloslista, jossa on sijaluku, pelaajan nimi ja paras tulos. Jos kahdella pelaajalla on sama tulos, nimet järjestetään aakkosjärjestykseen. Jokaisella pelaajalla on eri nimi ja ainakin yksi tulos.

Taulut

Pelaajat
idnimi
1Uolevi
2Maija
3Kaaleppi
Tulokset
idpelaaja_idtulos
11100
21350
32300
42350
53500

Haluttu tulos

1Kaaleppi500
2Maija350
3Uolevi350

Vastauksesi

SELECT RANK() OVER (ORDER BY Pelaajat.nimi ASC), Pelaajat.nimi, MAX(tulos) FROM Tulokset, Pelaajat WHERE pelaaja_id=Pelaajat.id GROUP BY Pelaajat.id;

Mallivastaus

SELECT ROW_NUMBER() OVER (ORDER BY MAX(T.tulos) DESC, P.nimi), P.nimi, MAX(T.tulos) FROM Pelaajat P, Tulokset T WHERE P.id=T.pelaaja_id GROUP BY P.id;

Tehtävä 96

Pelaajat jaetaan joukkueisiin niin, että aakkosjärjestyksessä joka toinen pelaaja kuuluu joukkueeseen 1 ja 2. Ilmoita joukkuejako annetuille pelaajille.

Taulut

Pelaajat
idnimi
1Uolevi
2Maija
3Liisa
4Kaaleppi

Haluttu tulos

Kaaleppi1
Liisa2
Maija1
Uolevi2

Vastauksesi

SELECT nimi, ((ROW_NUMBER() OVER (ORDER BY nimi)) - 1) % 2 +1 AS rivi FROM Pelaajat ORDER BY nimi;

Mallivastaus

SELECT nimi, 2-(ROW_NUMBER() OVER (ORDER BY nimi))%2 FROM Pelaajat;

Tehtävä 97

Pelaajat jaetaan joukkueisiin niin, että aakkosjärjestyksessä joka toinen pelaaja kuuluu joukkueeseen "Puput" ja "Kilit". Ilmoita joukkuejako annetuille pelaajille.

Taulut

Pelaajat
idnimi
1Uolevi
2Maija
3Liisa
4Kaaleppi

Haluttu tulos

KaaleppiPuput
LiisaKilit
MaijaPuput
UoleviKilit

Vastauksesi

SELECT nimi, CASE ((ROW_NUMBER() OVER (ORDER BY nimi)) - 1) % 2 +1 WHEN 1 THEN 'Puput' WHEN 2 THEN 'Kilit' END FROM Pelaajat ORDER BY nimi;

Mallivastaus

SELECT nimi, CASE WHEN (ROW_NUMBER() OVER (ORDER BY nimi))%2=1 THEN 'Puput' ELSE 'Kilit' END FROM Pelaajat;

About

mooc.fi Tietokannan perusteet kesä 2020 -tehtäväni ja harjoitustyö.