Avatar billede stoffer Nybegynder
31. oktober 2004 - 23:30 Der er 7 kommentarer og
1 løsning

GROUP BY problem

Jeg har denne SQL sætning:
-----------------------------------------------
        SELECT nc.country_id,nc.country,nc.country_code, count(nu.[user_id]) as UserCount,count(nl.layout_id) as LayoutCount, count(nlw.language_words_fk_country) as WordCount 
        FROM news_country nc
        LEFT OUTER JOIN news_user nu ON nu.user_country_id = nc.country_id
        LEFT OUTER JOIN news_layout nl ON nl.layout_fk_country_id = nc.country_id
        LEFT OUTER JOIN news_language_words nlw ON nlw.language_words_fk_country = nc.country_id
        GROUP BY  nc.country_id,nc.country,nc.country_code
        ORDER BY country
-------------------------------------------------------

Problemet er at all Counts giver det samme resultat. Altså kan den ikke håndtere mere end én count....

Jeg vil helst ikke gå ind i at lave en Temp tabel med Cursor. Der må være noget jeg har overset...
Avatar billede arne_v Ekspert
31. oktober 2004 - 23:32 #1
COUNT(tabelnavn.feltnavn) tæller antal ikke NULL værdier i den kolonne
*efter* joinen er lavet.

Det er da meget sandsyneligt at det giver samme tal !
Avatar billede arne_v Ekspert
31. oktober 2004 - 23:34 #2
Måske vil du i virkeligheden lave en UNION ?

(se f.eks. dette spm. http://www.eksperten.dk/spm/556496)
Avatar billede stoffer Nybegynder
31. oktober 2004 - 23:43 #3
Det forstår jeg ikke helt. Når jeg nu altid joiner til tabellen "news_country" burde den vel tage det som udgangspunkt i alle 3 joins. Og derved give forskelligt count al efter joinet på "news_country.country_id"
Avatar billede stoffer Nybegynder
31. oktober 2004 - 23:44 #4
Nej det er ikke en union...jeg skal have alle 3 counts ud for hver række...
Avatar billede stoffer Nybegynder
31. oktober 2004 - 23:47 #5
anyways. jeg går i seng nu...så svarer ikke på denne post før i morgen...
Avatar billede arne_v Ekspert
01. november 2004 - 08:08 #6
Så måske noget i retning af dette

SELECT * FROM
(SELECT nc.country_id,nc.country,nc.country_code, COUNT(nu.user_id) AS UserCount
FROM news_country nc LEFT OUTER JOIN news_user nu ON nu.user_country_id = nc.country_id
GROUP BY nc.country_id,nc.country,nc.country_code) AS count1,
(SELECT nc.country_id,nc.country,nc.country_code, COUNT(nl.layout_id) AS LayoutCount
FROM news_country nc LEFT OUTER JOIN news_layout nl ON nl.layout_fk_country_id = nc.country_id
GROUP BY nc.country_id,nc.country,nc.country_code) AS count2,
(SELECT nc.country_id,nc.country,nc.country_code, COUNT(nlw.language_words_fk_country) AS WordCount
FROM news_country nc LEFT OUTER JOIN news_language_words nlw ON nlw.language_words_fk_country = nc.country_id
GROUP BY nc.country_id,nc.country,nc.country_code) AS count3
WHERE count1.country_id=count2.country_id AND count2.country_id=count3_country_id
Avatar billede stoffer Nybegynder
01. november 2004 - 21:11 #7
YES. Bare perfekt. Smid et svar og få point.

Takker mange gange :)
Avatar billede arne_v Ekspert
01. november 2004 - 21:13 #8
svar
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