SQL hjälp
28 svar · 613 visningar · startad av sven · sida 2 av 2
En tilläggsfråga som primärt riktar sig till LarsG:
Jag har för vana att alltid skriva count(*), men jag ser att du använder count(fältnamn). Är det någon praktisk skillnad, är det ena SQL-standard men inte det andra, är det någon prestandaskillnad mellan de två eller är det helt enkelt en smaksak?
Mvh,
kunskapstörstande snabel
Japp sånt här gillar jag att se En utökad kunskapsöverföring.
Bra gjort.
Det är en funktionell skillnad
count(*) räknar alla poster
count(kolumn) räknar de poster där kolumn inte är null
Tack för länk, Palle, och för förklaring LarsG.
Den obligatoriska följdfrågan: Vad blir skillnaden om man, som i det här fallet, även hämtar fältets värde och använder group by? Kan alltså count(*) returnera ett felaktigt antal i detta fall?
Mvh
Count(*) returnerar inte felaktigt om du inte är på jakt efter ett annat resultat. Istället för att ange kolumnnamn brukar jag styra det med antingen HAVING eller WHERE... det brukar gå lika bra.
Jag har lite bekymmer att sätta mig in i varför man skulle använda Count(kolumn) om man bara har en count i frågan. :)
För övrigt så kan jag väl tillägga att i dom fall man använder Access och OleDb så är Count(*) betydligt bättre optimerat än Count(kolumn) enligt MSDN (här står även om null-fallet).
red.
Läste just länken från Palle... kanske lite onödig postning detta, men va fanken ;)
Jag har lite bekymmer att sätta mig in i varför man skulle använda Count(kolumn) om man bara har en count i frågan.
select pk.namn,count(fk.namn)
from pk left join fk on pk.namn = fk.namn
group by pk.namn
Då får man 0 på de namn som inte finns i fk-tabellen vilket kan vara av intresse.
Optimeringsmässigt så borde count(*) och count(namn) hanteras lika i de fall då namn är not null.
Alltid lika trevligt med upplysande information från dig, LarsG. :)