Gå til innhold

Hjelp med noen "enkle" MySQL spørringer!


Anbefalte innlegg

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 av klo
Lenke til kommentar
Videoannonse
Annonse

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
  • 1 måned senere...

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 av klo
Lenke til kommentar

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...