Avatar billede trumf Nybegynder
08. februar 2006 - 21:39 Der er 12 kommentarer og
1 løsning

hente sum og antal

Hejsa E

Jeg har 5 tabeller:
vin - vID|navn|rettetaf|prodID
brugere - navn|brugerID
producent - prodID|prodname
forhand - forhandlerID|lagerstatus|pris
karakter - karakterID|beskrivelse|karakter

Jeg vil gerne have gennemsnitskarakteren ud, samt prisen for hver enkelt forhandler.

Jeg har lavet følgende der ikke virker, men måske kan give et hint om hvad jeg vil.

SELECT v.navn, v.aargang, v.rettet, v.rettetaf, v.volumen, v.prodID
, p.prodname
, CASE WHEN k.beskrivelse <> '' THEN 'y' ELSE 'n' END AS anmeldt
, (SUM(k.karakter)/COUNT(k.karakterID)) AS karakter, COUNT(k.karakterID) AS antalstemmer
, f.pris , CASE WHEN f.lagerstatus = 0 THEN '<b>ukendt</b>' WHEN f.lagerstatus = 1 THEN 'p&aring; lager' END AS lagerstatus
FROM vin v
INNER JOIN karakterer k ON k.vID = v.vID
INNER JOIN forhand f ON f.vID = v.vID
LEFT JOIN producent p ON v.prodID = p.prodID
WHERE f.forhandlerID = @dealerID
GROUP BY k.karakter
ORDER BY @orderBy

Er der en med et godt overblik der kan hjælpe ?
Avatar billede arne_v Ekspert
09. februar 2006 - 00:17 #1
SUM(x)/COUNT(x) kan laves som AVG(x)
Avatar billede arne_v Ekspert
09. februar 2006 - 00:22 #2
og hvad faar du ud af det og hvordan er det forkert ?
Avatar billede trumf Nybegynder
09. februar 2006 - 00:26 #3
Jeg får dem alle ud, bare enkeltvis og ikke grupperet. Det er som om sum og count ikke virker, eller at den ikke grupperer rigtigt!
Avatar billede arne_v Ekspert
09. februar 2006 - 01:49 #4
skal der ikke grupperes efter forhandler og ikke efter karakter ?

evt. ogsaa alle vin felterne ?
Avatar billede trumf Nybegynder
09. februar 2006 - 09:29 #5
Tag dig ikke af at jeg har sat forhandlerid > 0 det er bare for at få mange resultater.

SELECT k.vID, v.navn, v.aargang, v.rettet, v.rettetaf, v.volumen, v.prodID
p.prodname
CASE WHEN k.beskrivelse <> '' THEN 'y' ELSE 'n' END AS anmeldt
AVG(k.karakter) AS karakter, COUNT(k.vID) AS antalstemmer
f.pris, MIN(f.pris) AS pris2
CASE WHEN f.lagerstatus = 0 THEN '<b>ukendt</b>' END AS lagerstatus
FROM vin v
INNER JOIN karakterer k ON k.vID = v.vID
INNER JOIN forhand f ON f.vID = v.vID
LEFT JOIN producent p ON v.prodID = p.prodID
WHERE f.forhandlerID > ",_dealerID);
GROUP BY f.forhandlerID, v.vID

Dette er næsten rigtigt, men det lister hver vin lige så mange gange som antallet af forhandlere.
Avatar billede trumf Nybegynder
07. maj 2006 - 19:32 #6
Arne, skal vi gøre den færdig eller skal jeg lukke ?

Jeg har ændret lidt i strukturen af tabeller, men det skulle ikke ændre på helheden. Du får den lige som den ser ud nu.

SELECT k.vID, gv.navn, v.aargang, v.rettet, v.rettetaf, bv.volumen, gv.prodID, p.prodname
, CASE WHEN k.beskrivelse <> '' THEN 'y' ELSE 'n' END AS anmeldt
, AVG(k.karakter) AS karakter, COUNT(k.vID) AS antalstemmer
, MIN(f.pris), MAX(f.pris) AS pris2, 'Vises ikke' AS lagerstatus
FROM vin v
INNER JOIN grundvin gv ON gv.gvID = v.gvID
INNER JOIN basisvin bv ON bv.bvID = v.bvID
INNER JOIN karakterer k ON k.vID = v.vID
INNER JOIN forhand f ON f.vID = v.vID
LEFT JOIN producent p ON gv.prodID = p.prodID
WHERE f.forhandlerID > 0
GROUP BY v.vID, v.aargang
ORDER BY karakter, antalstemmer

Det er den der "antalstemmer" der ikke er rigtig, jeg troede det var antallet af forhandlere, men det er det ikke alligevel, jeg kan ikke gennemskue det. Kan du hjælpe med at antalstemmer faktisk er antallet af karakterer på den enkelte vin.
Avatar billede arne_v Ekspert
08. maj 2006 - 01:14 #7
er det bedre med

COUNT(DISTINCT k.vID) AS antalstemmer

?
Avatar billede trumf Nybegynder
08. maj 2006 - 18:49 #8
Nej, der kommer kun 1 på hver så, hvilket er forkert...
Avatar billede arne_v Ekspert
09. maj 2006 - 04:06 #9
jeg er ret lost

hvad giver

COUNT(DISTINCT k.karakterID) AS antalstemmer

?
Avatar billede trumf Nybegynder
09. maj 2006 - 20:03 #10
Den giver lige hvad den skal, så du skal bare give et svar ;-)

Jeg troede efterhånden at du vidste alt... hvilket du så også gjorde, eller var det et godt gæt ?
Avatar billede trumf Nybegynder
09. maj 2006 - 20:04 #11
og så fjernede jeg også lige den ene group på årgang som jo egentligt ikke er nødvendig
Avatar billede arne_v Ekspert
09. maj 2006 - 21:50 #12
det var gaet

maaske et kvalificeret gaet, men stadig et gaet

og svar
Avatar billede trumf Nybegynder
09. maj 2006 - 21:55 #13
Takker, du er som altid "pengene" værd :)
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