12. april 2001 - 13:53Der er
20 kommentarer og 2 løsninger
SQL syntaks
Jeg har en tabel bestående af userid\'s og en score. Et userid kan forkomme mange gange grundet flere runder i spillet. Hvordan kan jeg med én SQL sætning summere alle scorene individuelt, så jeg får et recordset bestående af alle id\'er sammen med deres individuelle samlet score?
Når man nu har masser 15.000+ medlemmer som her på eksperten, så må de have beregnet en samlet score og lagt i samme tabel som userid og username. Eller hvad?
Jeg vil samtidig lave en join, men kan ikke få den ind uden at den brokker sig! Brugernavn ligger nemlig en anden tabel.
SQL = \"SELECT user.username, avg(tips.score), tips.userid FROM user,tips WHERE user.userid=tips.userid GROUP BY tips.userid HAVING Count(tips.userid)>4 ORDER BY avg(tips.score)\"
SQL = \"SELECT user.username, avg(tips.score), tips.userid FROM user,tips WHERE user.userid=tips.userid GROUP BY tips.userid, user.username HAVING Count(tips.userid)>4 ORDER BY avg(tips.score)\"
hvis det er seriøst det du laver, så læs lidt mere i SQL-hjælpen under join\'s og lav dit om til et der altid join\'er som du gerne vil ( inner / outer join ).
Martinlind>> jeg forstår ikke helt hvad du mener. Men er det noget med de her to SQL sætninger? hvori består forskellen?
SELECT AVG(tips.score) as avgScore, user.username, tips.userid FROM tips INNER JOIN user ON tips.userid = user.userid GROUP BY tips.userid, user.username HAVING Count(tips.userid)>4 ORDER BY AVG(tips.score) DESC
og
SELECT user.username, avg(tips.score), tips.userid FROM user,tips WHERE user.userid=tips.userid GROUP BY tips.userid, user.username HAVING Count(tips.userid)>4 ORDER BY avg(tips.score) DESC
SELECT user.username, avg(tips.score), tips.userid FROM user,tips GROUP BY tips.userid, user.username HAVING Count(tips.userid)>4 AND user.userid=tips.userid ORDER BY avg(tips.score) DESC
SELECT AVG(tips.score) as avgScore, user.username, tips.userid FROM tips INNER JOIN user ON tips.userid = user.userid GROUP BY tips.userid, user.username HAVING Count(tips.userid)>4 ORDER BY AVG(tips.score) DESC
perla>> den her virker hlle ikke:
SELECT user.username, avg(tips.score), tips.userid FROM user,tips GROUP BY tips.userid, user.username HAVING Count(tips.userid)>4 AND user.userid=tips.userid ORDER BY avg(tips.score) DESC
Må jeg foreslå at du prøver ORDER BY avgScore i stedet for ORDER BY AVG(tips.score). Måske er SQL-maskinen så dum at udregne den to gange, og der er (andre) SQL-varianter, der ikke tillader andet end navne efter en Order By.
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.