webForumDet fria alternativet
Logga in / Bli medlem

Sum() och group by

Databaser & SQL

13 svar · 298 visningar · startad av Macce

Medlem sedan apr. 2001425 inlägg
Trådstart#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 ?

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
Medlem 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å..) ;)

Medlem 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 ?

Medlem sedan dec. 200012 464 inlägg
#5

Kan du ge ett exempel på tabellinnehåll?

Medlem 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

Medlem sedan dec. 200012 464 inlägg
#7

och data för relevanta kolumner.

Medlem 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

Medlem 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
Medlem 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 ?

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)
Medlem sedan apr. 2001425 inlägg
#12

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

Medlem sedan apr. 2001425 inlägg
#13

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

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.

255 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)