26. september 2007 - 15:20Der er
62 kommentarer og 1 løsning
Beregn gennemsnit
Hvordan finder jeg gennemsnittet, hvor (i dette tilfælde) ID2 = 43?
<% Dim RS, SQL, averageRS Set RS = Conn.Execute("SELECT * FROM MinTabel WHERE ID2 = 43 ORDER BY vTitle ASC") SQL = "SELECT AVG(points) AS AveragePoints FROM MinTabel WHERE .......?" Set averageRS = Conn.Execute(SQL)
If Not RS.EOF Then
Do Until RS.EOF %> <a href="/../../dokument.asp?ID1=<%=RS("ID1")%>&ID2=<%=RS("ID2")%>" title="<%=RS("description")%>"><%=RS("vTitle")%></a> <%=averageRS("AveragePoints")%> <% RS.MoveNext Loop Else %>
Jeg er ikke 100% sikker på hvad du er ude efter, men kan du ikke bare bare lave din SQL sætning som: SELECT AVG(points) AS AveragePoints FROM MinTabel WHERE ID2 = 43
???
eventuelt smide den samme men din første SQL sætning
som det eksempel som du har givet i toppen kan du godt bruge den sætning som jeg skrev... rent faktisk kan du bruge denne: SELECT *, AVG(points) AS AveragePoints FROM MinTabel WHERE ID2 = 43 hvor du så for trukket alt data ud fra MinTabel hvor ID2 = 43 samt den regner gennemsnittet ud for ID2 = 43...
Det er jeg klar over, men det skal jo rendes igennem en løkke, og skal kunne beregnes på de ID's, hvor ID2 = 1, ID2 = 2, ID2 = 3 etc. Var det bare den ene, var det ikke noget problem.
Min første indskydelse var en relationsdatabase, men det burde kunne lade sig gøre på denne måde .... vil jeg mene :)
HJÆLP :o[ Det ser ud til, at der kun bliver taget fra ID2, hvor værdien er 1 (den allerførste). Gennemsnittet er rigtigt nok, men det passer jo ikke på de resterende ID's. Håber meget på nogle gode forslag.
hmm... din side er godt nok lidt skummel, du laver et sql statement som du kører igennem et loop, men du bruger det ikke. I det loop laver du så nye sql statements som rent faktisk returnerer det samme fordi du netop med dette statement ikke kører dem igennem (vil du kunne se hvis du skriver points ud fra dette statement)
Alt det andet, som skal trækkes gennem loopet, virker fint nok. Men hvor svært kan det være? Der skal bare hives et gennemsnit af pointene ud for hvert ID2. Jeg troede jeg lige kunne klare det med den ene hånd på ryggen, men jeg blev en del klogere :) Men jeg synes heller ikke loopet fungerer mht. pRS. Den udfører SQL'en første gang, og kommer så ikke med igen. Men hvorfor ikke?
Hej igen... Jeg har prøvet at køre -> SELECT ID2, AVG(points) AS AveragePoints FROM MinTabel GROUP BY ID2; <- den sql sætning igennem med samme opsætning som "27/09-2007 01:43:05"... det resultat som jeg får er det samme.. altså | ID2 | AveragePoints | +------+---------------+ | 5 | 4.6667 | | 8 | 6.0000 | | 43 | 5.3333 | ------------------------
Så bliver det samme link trukket ud 8 gange med de rigtige værdier, samt nogle værdier, som er helt skæve. Der trækkes også værdier ud fra andre ID2'ere:
De værdier, som er angivet, hvor ID2 = 1, er 10 og 5. Det giver i alt 15, og et gennemsnit på 7,50. Det er jo rigtigt nok. Men nogle af de andre værdier bliver også trukket ud.
Hvis jeg rem'er lidt ud:
<% Do Until RS.EOF
Dim strSQL, pRS strSQL = "SELECT points, AVG(points) AS AveragePoints FROM MinTabel GROUP BY ID2" Set pRS = Conn.Execute( strSQL )
- kommer gennemsnittet rigtigt ud, nemlig 7,50. Nu er problemet så bare det samme: 7,50 kommer også til at stå ved de 3 andre filer, hvor ID1 = 1. Hvilket betyder, at jeg er tilbage ved udgangspunktet.
Det er sikkert et simpelt spørgsmål om at få placeret sætningerne korrekt. Men jeg synes det er ved at blive lidt kringlet. Håber I kan se lyset. Jeg har lidt svært ved at se det lige nu :/
ID2 = 1 fik tilført 10 og 5, hvilket giver et gennemsnit på 7,50 - hvilket er rigtigt nok. Men der blev også hevet værdier fra ID2, hvor ID2 = 2, 3 osv. Se hvilke værdier i 27/09-2007 19:04:26
Det var idéen :) Det er jo en liste, hvor links til alle filerne bliver trukket ud, og hvor der i tabellen også angives hvilke værdier hver især har fået i gennemsnit.
Undskyld, fik henvist til forkert DB. Den er på plads nu. Nu får jeg
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [MySQL][ODBC 3.51 Driver][mysqld-4.0.18-nt]Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE ID2 = 1' at line 1
DEBUG: SELECT points, AVG(points) AS AveragePoints FROM MinTabel GROUP BY vMovieID WHERE vMovieID = 1
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE vMovieID = 1' at line 1
DEBUG: SELECT points, AVG(points) AS AveragePoints FROM MinTabel GROUP BY ID2 WHERE ID2 = 1
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE ID2 = 1' at line 1
Jeg en anelse om, at når den endelige løsning forelå, at det ville forekomme så logisk, så det gør helt ondt - og det gør det. Du skal simpelthen forgyldes med point, nye bedste ven :) 1000 tak for hjælpen :)
Jeg siger tak for point og tak for karma. Og hvis det skulle være en anden gang :D
Jeg har dog på fornemmelsen jf. dit indledende spørgsmål og nu hvor løsningen er kommet ud, at du kan klarer det hele med kun 1 SQL sætning i stedet for 2. Men det må vi lige vente med :D
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.