Avatar billede vb_begynder Nybegynder
05. april 2006 - 14:23 Der er 6 kommentarer og
1 løsning

kan ikke få en sum til at passe

select
count(DISTINCT Forhandler.Navn),
sum(Forhandler.Homesite),
sum(Forhandler.Menukort),
Forhandler.Kommune,
COUNT(Anmeldelser.Godkendt)
from Forhandler
LEFT JOIN Anmeldelser ON Forhandler.ID = Anmeldelser.Forhandler_ID
WHERE Forhandler.Landsdel='Fyn'
GROUP BY Forhandler.Kommune
ORDER BY Forhandler.Kommune

tblA:

ID    |Navn    |TalA    |TalB    |PostBy |Landsdel
----------------------------------------------------
1      |abc    |1      |0      |Odense |Fyn
2      |cde    |0      |1      |Odense |Fyn
----------------------------------------------------

tblB:

ID    |tblA_ID |Godkendt  |Tekst
------------------------------------------
1      |1      |1          |tekst
1      |1      |1          |tekst bla
1      |2      |1          |tekst bla bla
------------------------------------------

select
COUNT(DISTINCT tblA.Navn),
sum(tblA.TalA),
sum(tblA.TalB),
tblA.PostBy,
COUNT(tblB.Godkendt)
from tblA
LEFT JOIN tblB ON tblA.ID = tblB.tblA_ID
WHERE tblA.Landsdel='Fyn'
GROUP BY tblA.PostBy
ORDER BY tblA.PostBy

resultat:
COUNT( DISTINCT tblA.Navn ) | sum( tblA.TalA ) | sum( tblA.TalB ) | PostBy | COUNT( tblB.Godkendt ) 
2                          | 2                | 1                | Odense | 3

det som jeg ikke forstår er sum(tblA.TalA) = 2 skulle det ikke blive til 1 ??
Avatar billede barklund Nybegynder
05. april 2006 - 14:32 #1
Du får da netop 2 gange rækken med id 1 fra tabel a - derfor får du jo 1 + 1 = 2. Det ser da rigtigt nok ud herfra. :)

--
Morten Barklund
Avatar billede eagleeye Praktikant
05. april 2006 - 14:33 #2
Nej for når du lave en JOIN får du en tabel som ser sådan her ud:


ID    |Navn    |TalA    |TalB    |PostBy |Landsdel |  |tblA_ID |Godkendt  |Tekst
-----------------------------------------------------------------------------------
1      |abc    |1      |0      |Odense |Fyn            |1      |1          |tekst
1      |abc    |1      |0      |Odense |Fyn            |1      |1          |tekst bla
2      |cde    |0      |1      |Odense |Fyn            |2      |1          |tekst bla bla



Man kan sige du får posten fra tblA lige så mange gange som der er poster i tblB hvor ID=tblA_ID.

Derfor blver sum'en 2.
Avatar billede eagleeye Praktikant
05. april 2006 - 14:34 #3
Du kan prøve at rette:  GROUP BY tblA.PostBy
Til:    GROUP BY tblA.ID
Avatar billede vb_begynder Nybegynder
05. april 2006 - 14:42 #4
ok kan se problemet, men hvordan løser jeg det....

Kan ikke rette GROUP BY da jeg ønsker at de skal grupperes efter PostBy.

Jeg har ikke noget at bruge teksten til fra tblB, skal kun vide hvor mange rækker der er godkende....
Avatar billede barklund Nybegynder
05. april 2006 - 15:03 #5
du skal vide hvor mange unikke rækker fra tblA, der har et 1-tal i en bestemt kolonne? Et grimt hack ville være at sætte dem til 0 hvis de ikke var valgt og eller tblA.ID (istedet for 1), hvis de var valgt. Så kunne du tælle unikke rækker her.

Jeg har dog svært ved at se, hvad formålet er (det ønskede resultat), når du har den slags meta-navne for tabellerne og ikke kommer med formålet sådan beskrevet helt uformelt :)

--
Morten Barklund
Avatar billede eagleeye Praktikant
05. april 2006 - 15:12 #6
Hvilken version af mysql har du for en mulig løsning er med sub selects:

SELECT Sum(b.talA) AS SumtalA, Sum(b.talB) AS SumtalB, Sum(b.Countid) AS SumOfCountid, b.postBy
FROM (SELECT t1.id, t1.talA, t1.talB, t1.postBy, Count(t2.id) AS Countid FROM tblA t1 INNER JOIN tblB t2 ON t1.id = t2.tblA_ID GROUP by t1.id, talA, TalB, postBy) AS b
GROUP BY b.postBy
Avatar billede vb_begynder Nybegynder
05. april 2006 - 16:43 #7
Tror bare jeg deler det op...

select
COUNT(DISTINCT tblA.Navn),
sum(tblA.TalA),
sum(tblA.TalB),
tblA.PostBy,
from tblA
WHERE tblA.Landsdel='Fyn'
GROUP BY tblA.PostBy
ORDER BY tblA.PostBy

SELECT
COUNT(tblB.Godkendt)
from tblA
LEFT JOIN tblB ON tblA.ID = tblB.tblA_ID
WHERE tblA.Landsdel='Fyn'
GROUP BY tblA.PostBy
ORDER BY tblA.PostBy
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