webForumDet fria alternativet

Sum() och group by

13 svar · 296 visningar · startad av Macce

MacceMedlem sedan apr. 2001425 inlägg
#1

I min statistik så mäter jag tiden som en användare har besökt en länk och när besökaren klickar på en ny länk läggs den gamla tiden + gamla link_id:t i en ny insert för den länken osv...

Nu vill jag skapa en select-sats som grupperar på sessionid och sorterar efter visitdate och summerar den totala tiden som sessionid (besökaren) varit på webbplatsen och även hur många länkar som man besökt, jag vill även bara ta med de senaste 100 besökarna i statistiken...

typ:

SELECT top 100 sessionid,count(sessionid),user_agent,http_referer, sum(page_time) FROM tbl_linkstats Group by sessionid order by visitdate desc

sitter med boken sql på 3 veckor, men tycker inte att group by fungerar enl. exemplen. Är access annorlunda tro ?

Engine^Medlem sedan dec. 20003 887 inlägg
#2

Det enda jag tror du behöver göra är att lägga till de kolumner du väljer ut, som inte är aggregerade (heter det så?), i din group by.

SELECT TOP 100 sessionid, Count(sessionid), user_agent, http_referrer, sum(page_time)
FROM tbl_linkstats
GROUP BY sessionid, user_agent, http_referrer, visitdate
ORDER BY visitdate DESC
m_soderlundMedlem sedan sep. 20026 425 inlägg
#3

Sum()/Count() m.fl. och Group använder du på följande sätt:

SELECT Sum(falt1),Sum(falt2) FROM tabell GROUP BY falt1,falt2 Order By falt1

/r Okej, Engine^ hann före. (lite bättre kod också..) ;)

MacceMedlem sedan apr. 2001425 inlägg
#4

Vad jag inte förstår riktigt är att jag vill ju ha unika session i varje post, alltså gruppera dessa. Tar jag med fler i group by så får ju flera poster samma sessionid ???

Hur bör man göra ?

LarsGMedlem sedan dec. 200012 464 inlägg
#5

Kan du ge ett exempel på tabellinnehåll?

MacceMedlem sedan apr. 2001425 inlägg
#6

Kolumner:
id,page_id,form_page_id,form_page_id_time,user_agent,visitday,visitdate,http_referer,resolution,userip,sessionid

LarsGMedlem sedan dec. 200012 464 inlägg
#7

och data för relevanta kolumner.

MacceMedlem sedan apr. 2001425 inlägg
#8

page_id=nr. på föreg. länk
form_page_id_time = tiden som föreg. länk visades (sec)
visitday = veckodag 1-7
visitdate = now()
sessionid = session.sessionid

LarsGMedlem sedan dec. 200012 464 inlägg
#9
select count(*),sum(form_page_id_time),sessionid
 from tbl_linkstatus
 where cdate(visitdate) in
 (select top 100 cdate(vistidate)
     from tbl_linkstatus
   order by cdate(visitdate) desc)
group by sessionid
MacceMedlem sedan apr. 2001425 inlägg
#10

Lars> med top på datumen så får jag väl max 100 poster totalt, det jag är ut efter är 100 groups av sessionid...

:( om vi börjar från början, hur får jag denna att fungera ?

select sessionid from tbl_linkstats where sessionid in (select top 10 sessionid from tbl_linkstats group by sessionid) order by visitdate desc

varför fungerar inte order by så att jag får de senaste datumen istället för de minsta sessionid ?

Engine^Medlem sedan dec. 20003 887 inlägg
#11

Något åt det här hållet? Ska jag vara ärlig, så känns det väldigt underligt skrivet :OO

SELECT TOP 100 sessionid
FROM tbl_linkstats
WHERE sessionid IN
  (SELECT DISTINCT sessionid
    FROM tbl_linkstats
    ORDER BY visitdate DESC)
MacceMedlem sedan apr. 2001425 inlägg
#12

ORDER BY-instruktionen (visitdate) stämmer inte med DISTINCT :(

MacceMedlem sedan apr. 2001425 inlägg
#13

gör nog om statistiken och använder 2 tabeller istället med en relation mellan sessionid :OO

Engine^Medlem sedan dec. 20003 887 inlägg
#14

Det kanske hade fungerat om du plockat ut order by instruktionen, men jag tycker nog din ide om två tabeller är bättre.

132 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)