Kj3tll Skrevet 20. september 2015 Del Skrevet 20. september 2015 Hei. Jeg har en innlevering i sql databaser og strever med følgende: "Lag en spørring som teller opp antall ønsker for personer med flere enn 7 ønsker. Spørreresultatet skal vise personnr, fornavn og etternavn i én kolonne, samt antall ønsker. Sorter utskriften etter fødselsår, de yngste først." Jeg har dette til nå: --- SELECT concat(p.fornavn, ' ', p.etternavn) AS navn, p.fdato, o.gnr FROM person AS p, onske AS oWhere p.pnr = o.pnrORDER BY `p`.`fdato` ASC --- Jeg vil da tro at jeg må bruke count funksjonen til å telle opp antall ønsker flere enn 7.. men jeg vet ikke helt hvordan enda.. Så kan du hjelpe meg ? Lenke til kommentar
Camlon Skrevet 21. september 2015 Del Skrevet 21. september 2015 Du må bruke SUM, ikke COUNT. Ergo SELECT SUM(`gnr`) FROM `person` WHERE `gnr` >= 7 Lenke til kommentar
quantum Skrevet 22. september 2015 Del Skrevet 22. september 2015 Du må bruke SUM, ikke COUNT. Ergo SELECT SUM(`gnr`) FROM `person` WHERE `gnr` >= 7 Det er vel egentlig ikke godt å si, når vi ikke aner hvordan tabellene ser ut ... men hvis en rad tilsvarer ett ønske så må det nok bli count. Hvis TS gadd fortelle hvilke tabeller han har og hva de inneholder ville svarene sikkert bli litt mer to the point... 1 Lenke til kommentar
Imlekk Skrevet 22. september 2015 Del Skrevet 22. september 2015 Du må vel bruke et Group By statement for å slippe å få duplikate linjer. 1 Lenke til kommentar
Kj3tll Skrevet 22. september 2015 Forfatter Del Skrevet 22. september 2015 (endret) Du må bruke SUM, ikke COUNT. Ergo SELECT SUM(`gnr`) FROM `person` WHERE `gnr` >= 7 Du må bruke SUM, ikke COUNT. Ergo SELECT SUM(`gnr`) FROM `person` WHERE `gnr` >= 7 Det er vel egentlig ikke godt å si, når vi ikke aner hvordan tabellene ser ut ... men hvis en rad tilsvarer ett ønske så må det nok bli count. Hvis TS gadd fortelle hvilke tabeller han har og hva de inneholder ville svarene sikkert bli litt mer to the point... Du må vel bruke et Group By statement for å slippe å få duplikate linjer. Takker for hjelpen Ja, jeg fikk tips fra læreren også ved å bruke group by istede for order by. Fordi count kan ikke stå sammen med order by? Da var 8 av 10 oppgaver på oblig'n i boks Endret 22. september 2015 av Kj3tll Lenke til kommentar
etse Skrevet 22. september 2015 Del Skrevet 22. september 2015 Count kan fint stå sammen med begge deler. Men Count teller antall elementer som ikke er NULL - bruker du den sammen med order by, så vil du få hvor mange rader som har kolonnen til ikke NULL, sammen med group by, får du hvor mange i gruppen. Hvis jeg forstår oppgaven rett har du 2 tabeller, 1 som inneholder info om en person, og en annen som inneholder ønske (samt hvem som ønsket det). Da ville jeg gått for noe som dette: SELECT concat(p.fornavn, ' ', p.etternavn) AS navn, count(o.gnr) AS antall FROM person AS p JOIN onske AS o ON p.pnr = o.pnr GROUP BY p.pnrDet denne spørringe gjør er følgende:- Joiner tabellene (og sier at p.pnr tilsvarer o.pnr - slik at den forstår hvilke rader som skal knyttes sammen) - Grupperer så alle basert på personnummer(?) - teller hvor mange ulike ønsker hver person har (count gir antall elementer i gruppen) Lenke til kommentar
Crowly Skrevet 23. september 2015 Del Skrevet 23. september 2015 Bør også legg til HAVING antall > 7for å tilfredstille "personer med flere enn 7 ønsker" Lenke til kommentar
Kj3tll Skrevet 24. september 2015 Forfatter Del Skrevet 24. september 2015 Jeg strever også på den siste oppgaven i innleveringa. Jeg skal lage en spørring som viser hvor mange ønskelister hver gave er med på. Samtlige gaver skal med i spørreresultatet, selv om denne gaven ikke er med på noen ønskelister (skal da stå med 0). Sorter utskriften på gavenavn. Trykk her hvis du vil få en oversikt på hvilke tabeller jeg har med i oppgaven. Som sagt: jeg spør bare for å lære- har sittet å klødd meg i hodet i 2 timer nå.. Jeg setter pris på hvilket som helst svar hint eller løsning. Alt hjelper Lenke til kommentar
Crowly Skrevet 25. september 2015 Del Skrevet 25. september 2015 Tipper du har behov for en LEFT JOIN: SELECT a.feltA1, a.feltA2, b.feltB1, b.feltB2 FROM tabellA a LEFT JOIN tabellB b ON b.aID = a.ID Denne returerer alle rader fra tabell A, og de radene fra tabell B hvor joinen er sann, hvis ikke så får b.feltB1 og b.feltB2 verdien NULLEtt google image søk på "sql join" gir en haug med bilder som illustrerer dette, f.eks: http://i.imgur.com/hhRDO4d.png Lenke til kommentar
Kj3tll Skrevet 25. september 2015 Forfatter Del Skrevet 25. september 2015 (endret) Tipper du har behov for en LEFT JOIN: SELECT a.feltA1, a.feltA2, b.feltB1, b.feltB2 FROM tabellA a LEFT JOIN tabellB b ON b.aID = a.ID Denne returerer alle rader fra tabell A, og de radene fra tabell B hvor joinen er sann, hvis ikke så får b.feltB1 og b.feltB2 verdien NULLEtt google image søk på "sql join" gir en haug med bilder som illustrerer dette, f.eks: http://i.imgur.com/hhRDO4d.png takker endelig ferdig med innleveringa etter god hjelp! Endret 25. september 2015 av Kj3tll 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å