Avatar billede mishrah Nybegynder
13. august 2009 - 11:00 Der er 10 kommentarer og
1 løsning

SQL COUNT i en JOIN sætning (Nemme point for en SQL haj :)

Hej gutter,

Jeg skal have lavet en SQL sætning, der giver mig et udtræk over mest solgt varer i mit shopsystem.
Det gør jeg ved at SELECTE varelinier der tilhører aktive eller afsluttede ordrer. Således:

SELECT v.vareId, v.ordreId, o.id, o.status FROM Shop_Ordrer o, Shop_Varelinier v WHERE v.ordreId = o.id AND (o.status = 'aktiv' OR o.status = 'afsluttet')

Dette giver mig dog en lang liste over varelinier der tilhører færdige ordrer. Jeg vil gerne have talt dem sammen, således jeg får endnu en liste over vareId og antal gange hvert vareId optræder, fordi det vil give mig det antal gange det vareId er solgt :) Jeg håber I forstår :)

Og hvis den er rigtig fræk, så er den ORDER by mest solgte vare :)

På forhånd tusind tak,
Martin
Avatar billede 2c Nybegynder
13. august 2009 - 11:03 #1
Et gæt
SELECT COUNT(DISTINCT v.vareId) as antal FROM Shop_Ordrer o, Shop_Varelinier v WHERE v.ordreId = o.id AND (o.status = 'aktiv' OR o.status = 'afsluttet')
order by antal
Avatar billede 2c Nybegynder
13. august 2009 - 11:04 #2
Eller
SELECT v.vareId,
COUNT(*) as antal
FROM Shop_Ordrer o, Shop_Varelinier v WHERE v.ordreId = o.id AND (o.status = 'aktiv' OR o.status = 'afsluttet')
GROUP BY v.vareId
ORDER BY antal
Avatar billede mishrah Nybegynder
13. august 2009 - 11:14 #3
Hej Perfmon,
Tak for hurtigt svar :)

Jeg får dog følgende fejl når jeg eksekverer dine scripts:

http://csbeauty.dk/screen01.jpg

Og det var det jeg ikke kan komme udenom :)
Den sætning jeg selv er kommet frem til giver følgende resultat:

http://csbeauty.dk/screen00.jpg

Men der er jo ingen sammentælling :(
Avatar billede mishrah Nybegynder
13. august 2009 - 11:16 #4
Hov ovenstående var ikke men ingen det skulle være som et svar :/
Avatar billede michael_stim Ekspert
13. august 2009 - 11:30 #5
v.Antal skal nok bare være antal.
Avatar billede 2c Nybegynder
13. august 2009 - 11:39 #6
Ja, som Michal Stim siger :-)
Avatar billede mishrah Nybegynder
13. august 2009 - 11:42 #7
Hvis jeg fjerner ORDER delen, så virker det, men selvfølgelig uden sortering. Jeg kan ikke bare skrive "ORDER BY antal". Den retter det automatisk til "ORDER by v.antal"...
Avatar billede mishrah Nybegynder
13. august 2009 - 14:21 #8
Du får point for dit svar, da det jo løser hoveddelen af opgaven. Kan stadig ikke få den sorteret, og har prøvet en del forskelligt. Den konflikter med "group by".

Forresten, den løsning der virkede var #2.
Avatar billede arne_v Ekspert
13. august 2009 - 14:43 #9
MySQL foeventer:

... ORDER BY COUNT(*)

og ikke:

... ORDER BY antal
Avatar billede michael_stim Ekspert
13. august 2009 - 14:48 #10
Tror det er MSSQL. GROUP BY (og så alle de kolonner du forespørger på) - kolonne 1, kolonne 2 osv. Behøver kun bruge en i MySQL, alle i f eks Oracle, men er ikke sikker i MSSQL.
Avatar billede arne_v Ekspert
16. august 2009 - 17:52 #11
Efter at have kigget på screen shots kan jeg godt se at det er SQLServer.

Det var dog alligevel værd at prøve.

SQLServer er ligesom Oracle - det er kun MySQL some er speciel på det område.

Men antal er jo rent faktisk en aggregeret funktion.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester