Toon posts:

[TSQL] RanKing list query vraag

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Alle eerst moet ik bekennen dat mijn SQL kennis wellicht net voldoende is om redelijke querys te schrijven maar voor dit probleem lukt het mij helaas niet. Hopelijk kunnen jullie mij helpen.

ok hier het probleem:

ik heb 3 tabellen waarvan 1 tabel een tussen tabel is van de andere 2 tabellen.

de tabellen zijn:
- Bezoeker;
-BezoekerPad;
- Bezoeker_BezoekerPad; --> tussen tabel

in de Bezoeker_BezoekerPad tabel wordt het volgende opgeslagen:
- BezoekerID;
- BezoekerPadID;
- RequestTime.

In een Bezoeker_BezoekerPad tabel kan een bezoeker meerdere BezoekerPaden bevatten. BezoekerID 1 kan bijvoorbeeld meerdere keren in Bezoeker_BezoekerPad tabel voorkomen (wat overeenkomt met het aantal getoonde padden).

wat ik wil bereiken is een top 10 lijst maken van de meest populare pagina, het aantal pageview en het percentage ervan. een top 1 lijst generen is geen probleem maar een top 10 is een andere koek voornamelijk als ik de percentage van die pagina wil berekenen. Dit is de sql query die ik momenteel heb (top 10 lijst van pagina naam, en het aantal page views werken werken, alleen de percentage berekenen heb ik nog problemen mee).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
select  top 10 BezoekerPad.pagename as [b]Page[/b],
    count(BezoekerPad.BezoekerPad_nr)as [b]PageViews,[/b]
(  
            select
        (
        select cast(count(Bezoeker_BezoekerPad.BezoekerPad_nr) as float)
        from Bezoeker_BezoekerPad
        join BezoekerPad on BezoekerPad.BezoekerPad_nr = Bezoeker_BezoekerPad.BezoekerPad_nr
        join Bezoeker on Bezoeker.Bezoeker_nr = Bezoeker_BezoekerPad.Bezoeker_nr
            where  BezoekerPad.pagename=
            (
                select  BezoekerPad.pagename as pageName from  BezoekerPad
                join Bezoeker_BezoekerPad on BezoekerPad.BezoekerPad_nr = Bezoeker_BezoekerPad.BezoekerPad_nr  
                join Bezoekeron Bezoeker.Bezoeker_nr = Bezoeker_BezoekerPad.Visitor_nr     
                where 
                Bezoeker_BezoekerPad.BezoekerPad_nr =   
                (  
                    select top 1 Bezoeker_BezoekerPad.BezoekerPad_nr
                    from Bezoeker_VisitorPath 
                    join Bezoeker on Bezoeker_BezoekerPad.Bezoeker_nr = Bezoeker.Bezoeker_nr
                     group by Bezoeker_BezoekerPad.BezoekerPad_nr
                    order by count(*) desc
                )  
                group by BezoekerPad.pagename 
            )
        )/  cast(count(Bezoeker_BezoekerPad.BezoekerPad_nr) as float) * 100.0
        from BezoekerPad
        join Bezoeker_BezoekerPad on BezoekerPad.BezoekerPad_nr = Bezoeker_BezoekerPad.BezoekerPad_nr
        join Bezoeker on Bezoeker_BezoekerPad.Bezoeker_nr = Bezoeker.Bezoeker_nr

        
    ) as Percentage
from BezoekerPad
join Bezoeker_BezoekerPad on BezoekerPad.BezoekerPad_nr = BezoekerPad_BezoekerPad.BezoekerPad_nr
join Bezoeker on Bezoeker_BezoekerPad.Bezoeker_nr = Bezoeker.Bezoeker_nr
group by BezoekerPad.pagename
order by count(Bezoeker_BezoekerPad.BezoekerPad_nr) desc


Dit werkt alleen voor de meest populare pagina maar niet voor de rest. wat ik eigenlijk wil bereiken is niet alleen de percentage te berekenen van de meest populare pagina maar ook van de tweede, derde etc etc

Kan iemand mij uitleggen hoe ik dit kan bereiken (graag met voorbeelden als het mogelijk is).

Alvast bedankt

Groet B