En databas där alla poäng anv. ger samlas in för en spec sak:
---------
id
sak_id
point_given
user_id
-------
Vill nu ha reda på hur många som röstat på just denna sak och dess "medel" poäng.
Började tappert med att försöka få ut totala poängen och antal röster men får något fel redan här.
SELECT id, SUM(point_given) AS "tot_point", COUNT(user_id) AS "tot_votes" FROM sak_poang_DB WHERE id=sak_id GROUP BY sak_id
Får du några felmeddelanden eller blir värdet fel? Kan du posta ev. felmeddelanden? Har du några null-värden bland point_given? Varför använder du inte funktionen AVG?
Ett stort tack för alla inlägg. Nu ska vi se om vi kan få rätsida på allt då jag ser att jag rört till det (redigerat lite). (Man ska inte göra inlägg efter en lång dags slit vid datorn, hur mycket hjälp man än behöver.)
SELECT user_id
,SUM(point_given) AS "tot_point"
, COUNT(user_id) AS "tot_votes"
, AVG(point_given) AS "avg_point"
FROM sak_poang_DB
WHERE sak_id=2
GROUP BY user_id
Ger följande resultat :
tot_votes - 1
tot_point - 3
avg_point - 3.0000
mysql_numrows - 6
Dom rätta värdena borde ju vara:
tot_votes - 6
tot_point - 19
avg_point - 3.1667
mysql_numrows - 6
Du grupperar på user_id och med sak_id=2 så har varje användare bara givit en röst så medel hamnar på ca: 3.1 (19/6)
Precis! Viktig poäng! Jag misstänker att du bara hämtar en rad från result-setet, och när du grupperar på user_id så får du bara ut värdena från en användare.
Satt och testade lite mer, plus att jag läste i första inägget vad du egentligen ville åt:
Med detta SQL uttryck:
SELECT SUM(point_given) AS "tot_point" , COUNT(user_id) AS "tot_votes" , AVG(point_given) AS "avg_point" FROM sak_poang_DB WHERE sak_id=2 GROUP BY sak_id;
GunnarD, nogräknat så behöver du inte gruppera på sak_id eftersom det bara förekommer rader med ett sak_id i ditt exempel, och aggregat-funktionerna grupperar automatiskt över hela resultat-setet.
SELECT user_id
, SUM(point_given) AS "tot_point"
, COUNT(user_id) AS "tot_votes"
, AVG(point_given) AS "avg_point"
FROM sak_poang_DB
WHERE sak_id=2
GROUP BY sak_id
Vad jag vill visa är "saken" + poängen och rösterna på en sida.
Mr T, du kan inte selecta user_id eftersom det (potentiellt) finns flera röster av olika personer på ett och samma föremål. Alla rader som har sak_id = 2 slås ju ihop till en rad. Det är ok för SUM, COUNT och AVG, men inte user_id.
Vad jag vill visa är "saken" + poängen och rösterna på en sida.
Saken har du satt till 2 i SQL uttrycket, vilket antagligen är en variabel i ditt skrip (php, asp, .net ...) och då har du det där.
Alternativt är att ha med sak_id i uttrycket så får du med det i resultatet (ofarligt eftersom sak_id alltid är samma), men user_id kan du inte ha med av den anledningen som nitro20k1 skriver.
Använder du mitt uttryck i mitt inlägget ovan så får du fram det du vill ha.
Tack grabbar.
Naturligtvis är det som ni säger. Trodde jag var tvungen att ha med user_id i Select då jag använde det i min fråga, men naturligtvis är det ju inte så inser jag då jag använder andra saker i min fråga.