Avatar billede mydream Nybegynder
02. februar 2006 - 12:57 Der er 6 kommentarer og
1 løsning

tælle med et kriterie

Jeg har en brugerstatistik, hvor jeg forsøger at lave et view der viser hvilket domæne brugerne kommer fra, hvor mange der bliver medlemmer, og hvor mange brugere fra hvert domæne der kommer flere gange.

Jeg har lavet denne her:

---------------------------

SELECT    TOP 100 PERCENT SUBSTRING(REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', ''), 0, CHARINDEX('/', REPLACE(SUBSTRING(RefUrl, 8,
                      LEN(RefUrl)), 'WWW.', ''))) AS [Domain], COUNT(SUBSTRING(REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', ''), 0, CHARINDEX('/',
                      REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', '')))) AS [Count], COUNT(BID) AS AntalMedlemmer, SUM(AntalBesog)
                      AS SamletAntalBesog
FROM        dbo.StatistikBrugere
GROUP BY SUBSTRING(REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', ''), 0, CHARINDEX('/', REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.',
                      '')))
ORDER BY COUNT(*) DESC

---------------

men antal medlemmer tæller ikke rigtigt, da jeg ikke har noget kriterie på endnu. Kriteriet skal være: where BID>1 men jeg aner ikke hvor det skal indsættes, for at få det til at virke.

Derudover skal jeg have en kolonne mere med, hvor jeg tæller AntalBesog, hvor AntalBesog > 5 (for at se hvor kvalitetsbrugerne kommer fra)
Avatar billede lorentsnv Nybegynder
03. februar 2006 - 16:19 #1
Med HAVING kan du sette kriterier for resultatet af den grupperede forespørgsel:

SELECT    TOP 100 PERCENT SUBSTRING(REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', ''), 0, CHARINDEX('/', REPLACE(SUBSTRING(RefUrl, 8,
                      LEN(RefUrl)), 'WWW.', ''))) AS [Domain], COUNT(SUBSTRING(REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', ''), 0, CHARINDEX('/',
                      REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', '')))) AS [Count], COUNT(BID) AS AntalMedlemmer, SUM(AntalBesog)
                      AS SamletAntalBesog
FROM        dbo.StatistikBrugere
GROUP BY SUBSTRING(REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', ''), 0, CHARINDEX('/', REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.',
                      '')))
ORDER BY COUNT(*) DESC
Having COUNT(BID) > 1 and SUM(AntalBesog) > 5
Avatar billede lorentsnv Nybegynder
03. februar 2006 - 16:21 #2
Jeg er lidt sikker på om jeg forstår rigtig hvad du spørger efter. Ønsker du kun at vise de linier der har AntalBesog > 5, eller ønsker du kun at vise noget i den summerede kolonne SamletAntalBesog hvis antal > 5. Hvis det er det sidste du ønsker, kan du burge en CASE:
CASE WHEN SUM(AntalBesog)> 5 THEN SUM(AntalBesog) ELSE NULL END
Avatar billede lorentsnv Nybegynder
03. februar 2006 - 16:25 #3
Eksempel på bruge af CASE (som vist ovenfor)  i din forespørgsel, hvis SUM(AntalBesog) > 5 kun er en begrænsning i forhold til at vise summen i kolonnen SamletAntalBesog:

SELECT    TOP 100 PERCENT SUBSTRING(REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', ''), 0, CHARINDEX('/', REPLACE(SUBSTRING(RefUrl, 8,
                      LEN(RefUrl)), 'WWW.', ''))) AS [Domain], COUNT(SUBSTRING(REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', ''), 0, CHARINDEX('/',
                      REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', '')))) AS [Count], COUNT(BID) AS AntalMedlemmer, CASE WHEN SUM(AntalBesog)> 5 THEN SUM(AntalBesog) ELSE NULL END AS SamletAntalBesog
FROM        dbo.StatistikBrugere
GROUP BY SUBSTRING(REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', ''), 0, CHARINDEX('/', REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.',
                      '')))
ORDER BY COUNT(*) DESC
Having COUNT(BID) > 1
Avatar billede mydream Nybegynder
03. februar 2006 - 22:54 #4
BID er et brugernummer, og det er således ikke count(BID) der skal være større end 1 men selve BID.

AntalBesog skal heller ikke summeres, da det er det korrekte tal i sig selv.

Case giver denne fejl: The Query Designer does not support the CASE SQL construct.
Avatar billede ldanielsen Nybegynder
06. februar 2006 - 14:31 #5
The Query Designer does not support the CASE SQL construct.

Derfor kan du godt bruge case, blot skal du rette dit view til i Query analyzer.

Prøv med HAVING MIN(BID) > 1
Avatar billede mydream Nybegynder
06. februar 2006 - 15:47 #6
Hvis du mener:

SELECT    TOP 100 PERCENT SUBSTRING(REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', ''), 0, CHARINDEX('/', REPLACE(SUBSTRING(RefUrl, 8,
                      LEN(RefUrl)), 'WWW.', ''))) AS [Domain], COUNT(SUBSTRING(REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', ''), 0, CHARINDEX('/',
                      REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', '')))) AS [Count], COUNT(BID) AS AntalMedlemmer, SUM(AntalBesog)
                      AS SamletAntalBesog
FROM        dbo.StatistikBrugere
GROUP BY SUBSTRING(REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.', ''), 0, CHARINDEX('/', REPLACE(SUBSTRING(RefUrl, 8, LEN(RefUrl)), 'WWW.',
                      '')))
HAVING      (MIN(BID) > 1)

så virker det ikke, da den så bruger kriteriet på hele viewet og ikke kun på den kolonne der skal indeholde medlemmer.
Avatar billede mydream Nybegynder
07. juni 2006 - 15:06 #7
lukker
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