webForumDet fria alternativet

Poängformel

11 svar · 302 visningar · startad av fredrik99

fredrik99Medlem sedan maj 2000426 inlägg
#1

Jag använder följande sats för att få ut en poänglista!

SQL = "SELECT Enamn, Fnamn, Sum(Point) AS SummaPoint1 FROM 2003 GROUP BY Enamn, Fnamn ORDER BY 3 DESC"

Enligt "poängregeln" skall endast dem tio bästa poängen visas (point-fältet). Poängen skall sedan läggas ihop (sum). (Med SQL-satsen ovan läggs alla poäng i 'point'-fältet ihop)

Alltså, dem tio bästa poängen skall läggas ihop, för att sedan skrivas ut med variabeln 'summapoint1'

Hur löser jag detta enklast?

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Om du använder Access så

SELECT Enamn, Fnamn, Sum(Point) AS SummaPoint1 
FROM 2003 as x
GROUP BY Enamn, Fnamn 
having sum(point) in (
select  top 10 sum(Point) FROM 2003
where Enamn = x.Enamn
    and Fnamn = x.Fnamn
 order by 1 desc)
ORDER BY 3 DESC
fredrik99Medlem sedan maj 2000426 inlägg
#3

Det verkade inte att funka :( Det blev samma resultat som tidigare, dvs. samtliga poäng adderades (inom samma enamn och fnamn givetvis).

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Naturligtvis blir det det. Så här då

SELECT Enamn, Fnamn, Sum(Point) AS SummaPoint1 
FROM 2003 as x
where point in (
select  top 10 Point FROM 2003
where Enamn = x.Enamn
    and Fnamn = x.Fnamn
 order by 1 desc)
GROUP BY Enamn, Fnamn 
ORDER BY 3 DESC
fredrik99Medlem sedan maj 2000426 inlägg
#5

Det blev förändrade resultat, men det stämmer ännu inte ...

Jag har försökt att hitta mönstret, men inte lyckats :(

fredrik99Medlem sedan maj 2000426 inlägg
#6

Har kollat lite på resultatmönstret, poängen som skrivs ut är +- 4-8 p från totala poängen (samtliga poäng).

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Det finns ju ett problem med Top i Access och det är att om det finns flera resultat som är lika inom de tio så kommer dessa också med.

Man kan undvika det genom att ha med fler kolumner i order by så att det blir enbart unika värden. Hur ser din tabell ut?

Enligt det resonemanget så bordet summan kunna bli för stor men aldrig för liten om man inte kan få en negativ poäng.

fredrik99Medlem sedan maj 2000426 inlägg
#8

Det finns ju ett problem med Top i Access och det är att om det finns flera resultat som är lika inom de tio så kommer dessa också med.

LarsG, Du har så rätt så :)

Tabell, 2003
Nr, räknare
datum, datum/tid
arr, text
typ, tal
klass, text
fnamn, text
enamn, text
langd, tal
tid, text
segrare, text
plac, tal
antal, tal
km-tid, text
split, tal
point, text
mark, text

LarsGMedlem sedan dec. 200012 464 inlägg
#9

Då borde det bli bra om man lägger till räknar-kolumnen i order by

SELECT Enamn, Fnamn, Sum(Point) AS SummaPoint1 
FROM 2003 as x
where point in (
select  top 10 Point FROM 2003
where Enamn = x.Enamn
    and Fnamn = x.Fnamn
 order by point desc, nr)
GROUP BY Enamn, Fnamn 
ORDER BY 3 DESC
fredrik99Medlem sedan maj 2000426 inlägg
#10

Det verkar bli samma resultat som innan, dvs:

Det finns ju ett problem med Top i Access och det är att om det finns flera resultat som är lika inom de tio så kommer dessa också med.

:OO

BrimbaMedlem sedan dec. 19995 875 inlägg
#11

Prova detta?

SELECT TOP 10 x.Enamn, x.Fnamn, Sum(x.Point) AS SummaPoint1 
FROM 2003 x LEFT JOIN (SELECT y.Point FROM 2003 y ORDER BY y.Point, y.nr) qry1 ON x.Point=qry1.Point
WHERE (qry1.Point IS NOT NULL)
GROUP BY x.Enamn, x.Fnamn
ORDER BY 3 DESC
fredrik99Medlem sedan maj 2000426 inlägg
#12

Resultatet skrivs ut, men värdena i 'summapoint1' är ofantligt höga... :(

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