Jag har klurat på den här länge nog nu utan att komma fram till en tillräckligt bra lösning. Kanhända måste jag lösa det på mitt omständiga vis, men jag är nyfiken på om jag har missat någon optimerad lösning. Finns den är jag övertygad om att SQL-gurusarna här kommer kläcka den!
Jag har en MySQL-tabell för betygsättning av bilder, med tre aktuella fält: bild, användare och betyg. Betyg innehåller heltal 1 eller -1, användare talar om från vem betyget kommer och bild vilken bild betyget avser. Jag avser att summera betyget för en viss bild. Klurigheten är att en användare kan ha många betyg i databasen - för samma bild. Det är dock endast ett dåligt (-1) och ett bra (1) betyg som skall summeras per användare. Vilket bra eller dåligt betyg i ordningen som summeras spelar ingen roll.
Doggelito: Nej, det blir inte riktigt rätt. Då summerar den alla betyg uppdelat per användare. Dvs resultatet från min ovanstående exempeltabell skulle bli ungefär:
Och det är inte vad jag vill uppnå. Jag vill för det första summera alla betyg till en summa, inte uppdelat per användare. För det andra skall frågan dessutom enbart räkna max ett bra respektive ett dåligt betyg från varje användare ...
Lars: Anledningen till flera betyg är att bilden kan redigeras efter kritik, och därmed få nytt betyg från samma "kritiker" (användare). Detta ska dock inte påverka ursprungliga betyget.
För övrigt fungerar din fråga bra ja, om det hade räckt med att räkna ett betyg från varje användare, men jag vill räkna max ett dåligt OCH ett bra från varje användare, därav kruxet (och två frågor som jag hade i mitt exempel ovan).
Går det inte att lösa i en enkel fråga så får jag väl köra på två, men jag var nyfiken om någon hade några idéer. Jag förstår för övrigt om detta betygssystem låter underligt men det är så det kommer fungera
vilket innehåller högst ett dåligt och högst ett bra betyg per användare för denna bild. Summan av betygen i detta resultat blir då 2 som du förväntade dig,
Lars: Tack! Förlåt mitt tidigare svar, jag fick för mig att DISTINCT skulle plocka ut endast på unik användare, inte använda sig av både användare och betyg tillsammans som unik kombination. Så visst fungerade det utmärkt.
Frågan blev alltså tillslut:
SELECT SUM(betyg)
FROM (
SELECT DISTINCT anvandare, betyg
FROM tabell
WHERE bild = 20
) AS temp
371 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91