webForumDet fria alternativet

Fråga innehållande dividera med 0

Databaser & SQL

12 svar · 289 visningar · startad av Obbelix

Medlem sedan okt. 2002257 inlägg
Frågan#1

Halloj på er!

Har ett problem som jag försökt löst genom att söka på forumet men har inte funnit nåt.

Har ett stryktips som man måste ange vilket lag man håller på för att kunna vara med å tippa.
Nu tänkte jag att jag skulle ta ut ett värde på hur bra supportrarna för lagen i snitt är på att tippa (procentuellt).

Varje gång man rättar så adderas varje tippares antal rätt till i ett fält för respektives lag, samt + 1 för varje match i "match fältet"

När jag sen ska få ut detta så använder jag:

strSQL = "SELECT lag, poang, matcher, antal, ROUND(poang  / matcher ,2) as medelbetyg FROM Support ORDER BY 5 DESC "

Problemet är att om alla supportrar för nåt lag inte tippat alls så är ju både matcher och poäng 0.

Kan man på nåt sätt undvika dessa nollor i sql-frågan?

/Peter

Medlem sedan aug. 20003 575 inlägg
#2

man kan väl ha if i en sql sats ?

Medlem sedan sep. 2002366 inlägg
#3

eller så lägger du ut
ROUND(poang / matcher ,2)
utan för SQL satsen och kollar om den är noll..

-Eitraz

Medlem sedan feb. 20012 412 inlägg
#4

Du kan ju alltid lägga till ett villkor, problemet då är att du inte får ut dessa poster, vilket du kanske vill?

strSQL = "SELECT lag, poang, matcher, antal, ROUND(poang  / matcher ,2) as medelbetyg FROM Support WHERE poang > 0 AND matcher > 0 ORDER BY 5 DESC "
Medlem sedan dec. 200012 464 inlägg
#5
strSQL = "SELECT lag, poang, matcher, antal, " & _
" case when matcher <> 0 then ROUND(poang  / matcher ,2)  else 0 end as medelbetyg " & _
" FROM Support  " & _
" ORDER BY 5 DESC "

Vilken dbms använder du?

Inte mycket asp i detta. Flyttas.

redigerat bort where som inte är relevant om man har case.

Medlem sedan feb. 20012 412 inlägg
#6

LarsG, en fråga:

Varför måste man köra case-satsen när WHERE-villkoret filtrerar bort de fallen som inte är större än 0 ?

Teoretiskt sätt borde else-satsen i case-villkoret aldrig köras?

Medlem sedan dec. 200012 464 inlägg
#7

Nu klippte jag fel kod. Jag tänkte att det skulle vara utan where. Jag redigerar.

Medlem sedan feb. 20012 412 inlägg
#8

Även gurus kan missa :e

Medlem sedan okt. 2002257 inlägg
#9

Ojojoj... Tack tack för alla snabba svar.

Jag kör på "Jörgen HP's" svar:

strSQL = "SELECT lag, poang, matcher, antal, ROUND(poang  / matcher ,2) as medelbetyg FROM Support WHERE poang > 0 AND matcher > 0 ORDER BY 5 DESC "

Sen kör jag en runda till för att eventuellt plocka fram de med '0'

strSQL = "SELECT lag, antal FROM Support WHERE poang =0 or matcher =0 ORDER BY antal ASC "

Sen loopar jag först ut de med nåt värde sen de med noll.

Är detta helt galet? Det funkar finfint i alla fall...
Testade även en sväng med LarsG's förslag men fick det aldrig att funka.

Tack igen för snabba svar!

//Peter

Medlem sedan dec. 200012 464 inlägg
#10

Att du fick fel med min kod kan bero på att t.ex. Access inte har stöd för den konstruktionen. Det finns motsvarande.

Vad fick du för fel?

Det verkar ju onödigt att ställa två frågor då det går lika bra med en.

Access

strSQL = "SELECT lag, poang, matcher, antal, " & _
" iif(matcher <> 0,ROUND(poang  / matcher ,2),0) as medelbetyg " & _
" FROM Support  " & _
" ORDER BY 5 DESC "
Medlem sedan okt. 2002257 inlägg
#11

Jo jag använder Access. Minns inte felmeddelandet.

Angående koden. ska det inte vara med en else sats?
Blir denna kod snabbare än den andra?

Ska testa den imorrn när jag är lite piggare.

//Peter

Medlem sedan dec. 200012 464 inlägg
#12

Angående koden. ska det inte vara med en else sats?

iif fungerar så att om första argumentet är sant så returneras andra argument annars det tredje.

Blir denna kod snabbare än den andra?

Jo, något bättre borde det bli.

Medlem sedan okt. 2002257 inlägg
#13

OK!

ja trodde att "iif" var ett stavfel därför "else" frågan.

Ska som sagt testa imorrn...

/Peter

258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)