webForumDet fria alternativet
Logga in / Bli medlem

SUM (tror jag...)

Databaser & SQL

10 svar · 304 visningar · startad av Eclipse

Medlem sedan juli 20003 825 inlägg
Frågan#1

http://www.w3schools.com/sql/sql_groupby.asp

På denna sidan finns lite kod som jag tänkte man kunde ha i en TOP 10 most wanted links.

[clickCounter]
intID
dteCreated
intFaqID

Var börjar jag?? Jag vill ha de tio mest besökta länkarna den senaste veckan...

Medlem sedan dec. 200012 464 inlägg
#2

Varför sum?

select top 10 * from links order by clickCounter desc

eller hur ligger saker lagrade?

Medlem sedan juli 20003 825 inlägg
#3

Det där kommer att bli fel!

TOP 10 betyder de 10 översta posterna! Om folk klickat på en länk 11 gånger kommer de 10 första posterna enbart innehålla pekare (intFaqID) till samma post... No good!

***
Så här är uppgiften på Svenska:

Sammanställ antalet träffar den senaste veckan. Lista varje post som fått flest träffar en gång, samt räkna gärna ut hur många träffar en viss post fick...

Alltså, varje gång man klickar på en länk skapas en ny INSERT INTO.

Medlem sedan dec. 200012 464 inlägg
#4

Jo, jag anade att det låg åt det hållet

select top 10 intfaqid,count(*) from clickcounter group by intfaqid order by 2 desc
Medlem sedan juli 20003 825 inlägg
#5

Det ser bättre ut. Jag återkommer...

Jag har också ett förslag som innehåller count.

Medlem sedan juli 20003 825 inlägg
#6
'SQL = "SELECT TOP 10 cc.intFaqID, COUNT(*) FROM clickCounter cc GROUP BY intFaqID ORDER BY 2 DESC;"
'SQL = "SELECT TOP 10 cc.intFaqID, COUNT(*) FROM clickCounter cc GROUP BY cc.intFaqID ORDER BY 2 DESC;"
'SQL = "SELECT TOP 10 cc.intFaqID, COUNT(*) FROM clickCounter cc GROUP BY cc.intFaqID ORDER BY 2 DESC;"
SQL = "SELECT TOP 10 cc.intFaqID, COUNT(*), faq.x_ID FROM clickCounter cc, faq GROUP BY cc.intFaqID ORDER BY 2 DESC;"

Nej du... jag får inte i hop det när man blandar in ytterligare en tabell. DSessutom visas inte alls TOP 10 utan alla poster uppfyller kriteriet...

Medlem sedan dec. 200012 464 inlägg
#7

Alla kolumner i select-listan (som inte ingår i en aggregatfunktion (count, sum etc)) måste vara med i group by.

Top fungerar så att den även tar med de som är lika (med avseende på det som finns i order by)

Om du har 1000 länkar och 9 har visats 2 gånger och de övriga 1 gång, så kommer du att få med alla poster. Så är det i Access-världen. Lägg till en extra kolumn i order by

SQL = "SELECT TOP 10 cc.intFaqID, COUNT(*) FROM clickCounter cc GROUP BY intFaqID ORDER BY 2 DESC, 1"
Medlem sedan juli 20003 825 inlägg
#8

Det här blir ju fan bara värre och värre... Ingenting fungerar ju längre!

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'intFaqID WHERE dteCreated > #2002-09-09 16:42:11#'.

/top_10.asp, line 32

SQL = "SELECT TOP 10 intFaqID, COUNT(intFaqID) FROM clickCounter  " _
&  " GROUP BY intFaqID WHERE dteCreated > #" & dateAdd("w", -1, now()) & "# ORDER BY 2 DESC, 1;"
Medlem sedan dec. 200012 464 inlägg
#9

group by skall vara efter where och före order by

Medlem sedan juli 20003 825 inlägg
#10

OK, deal!

Jättebra!

***
SQL = "SELECT TOP 10 cc.intFaqID, COUNT(cc.intFaqID), faq.x_subject FROM clickCounter cc, faq " _
& " WHERE cc.dteCreated > #" & dateAdd("w", -1, now()) & "# AND " _
& " cc.intFaqID = faq.x_ID GROUP BY cc.intFaqID ORDER BY 2 DESC, 1;"

***
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'x_subject' as part of an aggregate function.

/top_10.asp, line 36

Jag blir helt galen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Jag har testat lite olika varianter men det går ju inte att få med en post från den andra tabellen!!! Det MÅSTE ju bara funka!!

Medlem sedan dec. 200012 464 inlägg
#11

Alla kolumner i select-listan (som inte ingår i en aggregatfunktion (count, sum etc)) måste vara med i group by.

SQL = "SELECT TOP 10 cc.intFaqID, COUNT(cc.intFaqID), faq.x_subject FROM clickCounter cc, faq " _ 
& " WHERE cc.dteCreated > #" & dateAdd("w", -1, now()) & "# AND " _ 
& " cc.intFaqID = faq.x_ID GROUP BY cc.intFaqID,faq.x_subject  ORDER BY 2 DESC, 1"
263 ms totalt · 4 externa anrop · v20260731065814-full.14655e19
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)