klo Skrevet 19. september 2006 Del Skrevet 19. september 2006 (endret) SE NEDOVER, NYE SPØRSMÅL! Trenger hjelp med en SQL spørring. Tabellene ser slik ut: ritt_dag ( S_ID char(4), R_TID integer, R_TID2 integer ) syklister ( S_ID char(4) PRIMARY KEY, S_FNAVN char(30), S_ENAVN char(30), L_ID char(4) ) sykkel_lag ( L_ID char(4) PRIMARY KEY, L_NAVN char(30) ) Og jeg skal lage en spørring som lister lag navn (L_NAVN) og sum av tider fra 2 dager (R_TID og R_TID2) fra alle syklistene i laget (S_ID (syklist id) med L_ID (lag id)), sortert etter lagnavn (L_NAVN). Har prøvd med litt fram, men kommer ikke helt i mål. SELECT sykkel_lag.l_navn, sykkel_lag.l_id ritt_dag.r_tid, ritt_dag.r_tid2, syklister.s_fnavn, syklister.s_enavn FROM ritt_dag, syklister, sykkel_lag where syklister.s_id=ritt_dag.s_id, syklister.l_id=sykkel_lag.l_id order by r_tid+r_tid2; Er takknemlig for all hjelp. Endret 13. november 2006 av klo Lenke til kommentar
roac Skrevet 19. september 2006 Del Skrevet 19. september 2006 Noe slikt bør vel funke: select, l.l_navn sum(r.r_tid+r.r_tid2) from ritt_dag r inner join syklister s on (r.s_id = s.s_id) inner join sykkel_lag l on (l.l_id = s.l_id) order by l.navn group by l.navn Forøvrig er det ikke god praksis å prefikse kolonnenavn (r_noe), bruk heller tilsvarende uten prefiks (noe). Lenke til kommentar
klo Skrevet 13. november 2006 Forfatter Del Skrevet 13. november 2006 (endret) Hei. Takk for svar. Trenger hjelp med noen nye spørringer som jeg har litt problemer med. Tabellstruktur: deltaker ( ID char(5) PRIMARY KEY, etternavn char(30), fornavn char(30), land char(20) ); skyte ( ID char(5) PRIMARY KEY, treff integer, poeng integer ); hopp ( ID char(5) PRIMARY KEY, lengde1 integer, lengde2 integer, poeng integer ); lop ( ID char(5) PRIMARY KEY, lengde integer, poeng integer ); Spørringer: 1. Skal ha navn på de deltakerene som har minst poeng under kategorien skyting.. altså skyte.poeng , den skal liste opp kun de med lavest poengsum om det er flere som deler den plassen. 2. Samme som i spørring 1 bare at nå skal vi ha de med mest poeng fra alle grenene (skyte.poeng, hopp.poeng, lop.poeng) 3. Hvilket land som fikk mest poeng, og den skal vise flere land viss flere deler førsteplassen. Altså limit 1 er ikke nokk her heller.. Har prøvd meg litt frem.. men får det ikke helt til.. Dette er det jeg har komt frem til, som ikke funker helt som det skal: 1. select fornavn, etternavn from deltaker, skyte where deltaker.id=skyte.id order by poeng asc limit 1; Problemet er vel å få vekk limit 1 og få den til å liste bare de med lavest poengsum. 2. select fornavn, etternavn from deltaker, skyte where deltaker.id=skyte.id order by poeng desc limit 1; Samme problem som i oppg1. 3. select land, sum(s.poeng+h.poeng+l.poeng) FROM deltaker d INNER JOIN (skyte s, hopp h, lop l) on (d.id=s.id and d.id=s.id and d.id=h.id) order by land; Kun liste de laga med mest poeng.. Endret 13. november 2006 av klo Lenke til kommentar
klo Skrevet 13. november 2006 Forfatter Del Skrevet 13. november 2006 Har tukla litt mer med oppgave 3. Lurer litt på om jeg må bruke view? Isåfall hvordan? Slik at jeg kan spørre utifra tabellen jeg får fra denne, og kun få de med mest poeng: select land, sum(s.poeng+h.poeng+l.poeng) FROM deltaker d INNER JOIN (skyte s, hopp h, lop l) on (d.id=s.id and d.id=s.id and d.id=h.id) group by land order by sum(s.poeng+h.poeng+l.poeng) desc; Lenke til kommentar
Manfred Skrevet 13. november 2006 Del Skrevet 13. november 2006 select land, sum(s.poeng+h.poeng+l.poeng) AS tot_poeng FROM deltaker d INNER JOIN (skyte s, hopp h, lop l) on (d.id=s.id and d.id=s.id and d.id=h.id) group by land order by tot_poeng desc; Lenke til kommentar
klo Skrevet 14. november 2006 Forfatter Del Skrevet 14. november 2006 select land, sum(s.poeng+h.poeng+l.poeng) AS tot_poeng FROM deltaker d INNER JOIN (skyte s, hopp h, lop l) on (d.id=s.id and d.id=s.id and d.id=h.id) group by land order by tot_poeng desc; 7276937[/snapback] Den eneste forskjellen der er vel at du forandrer navnet på kolonna? Lenke til kommentar
Manfred Skrevet 15. november 2006 Del Skrevet 15. november 2006 forandrer? jeg kaller summen "AS", for å gi den et alias, ellers får du ikke sortert på den senere. Lenke til kommentar
roac Skrevet 16. november 2006 Del Skrevet 16. november 2006 forandrer? jeg kaller summen "AS", for å gi den et alias, ellers får du ikke sortert på den senere. 7288179[/snapback] Hvis dette stemmer, så sier jeg bare som jeg alltid har sagt, MySQL er en rar database Men, spøk satt til side, det er uansett god praksis å gi kolonner et godt navn, enten de er i tabeller eller resultatsett, og f eks "GROUP BY Sum(a.ditt+b.datt/c.noe)" ser jo ikke akkurat vakkert ut. Lenke til kommentar
Manfred Skrevet 17. november 2006 Del Skrevet 17. november 2006 MSSQL pleier vel strengt tatt også å krangle på at du har GROUP BY, eller ORDER BY en aggregate... MSSQL gir meg følgende feilmelding: "Cannot use an aggregate or a subquery in an expression fir the group by list of a GROUP BY clause" Så da vil jeg kanskje heller se muligheten for en rar utvikler enn en rar database. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå