16. februar 2008 - 20:03Der er
55 kommentarer og 1 løsning
Gennemsnitsalder i VB .Net
Hej
Jeg skal lave lidt statistik fra vores SQL database. Bl.a jeg jeg finde gennemsnitsalderen for at antal personer: Jeg kan lave en søgning i en SQL database der lister personernes alder - men jeg vil ha' det ind i VB .NET:
SELECT DATEDIFF(year, Fødselsdato, [Op# dato])
Antal personer i databasen i et givet årstal findes i databasen ved:
SELECT Count(*) from HCV WHERE Årstal = ('" & Årstal & "')
Jeg vil herefter gerne finde peronerne gennemsnitsalder med én decimal og det kan jeg ikke engang finde ud af at lave i en SQL forespørgsel - HJÆLP!!!
Gennemsnittet beregnes via Avg() funktionen - Avg = Average = Gennemsnit.
"gennemSnit" kommer ikke nogen steder fra ... med AS kommandoen opretter jeg et alias for det tal der kommer ud som resultat af Avg(). Det alias har jeg kaldt gennemSnit, men du kunne kalde det noget andet hvis du ønsker.
Aliaset betyder bare at det ser ud som om at der er kommet et gennemSnit-felt i dit resultat og at det er der du har værdien.
Der er en eller anden fejl i nedenstående (fejler ved FROM) - kan du gennemskue det?
Dim Command1 As New SqlCommand("SELECT AVG(DATEDIFF(year, Fødselsdato, [Op# dato])) as GennemSnit) FROM HCV", Connection) Dim reader1 As SqlDataReader = Command1.ExecuteReader() If reader.Read() Then Statistik = reader.GetInt32(0) MsgBox(Statistik) End If
Dim Command1 As New SqlCommand("SELECT AVG(DATEDIFF(year, Fødselsdato, [Op# dato])) as GennemSnit FROM HCV WHERE Årstal = ('" & Årstal & "')", Connection) Dim reader1 As SqlDataReader = Command1.ExecuteReader() If reader1.Read() Then Statistik = Double.Parse(reader1("GennemSnit")) MsgBox(Statistik) End If
...nej det er helt klart med decimal - resultatet skal være et gennemsnit af flere hundrede personers alder - det bliver logisk set IKKE et tal UDEN decimal!
Der er absolut intet *logisk* i vejen for at det faktisk kan være et tilfælde hvor at gennemsnitettet er et helt tal. Hvorvidt at det er *sandsynligt* afhænger helt af talmaterialet.
Hvad gemmer der sig bag feltet Årstal? Hvad er det for nogle personeer der udtrækkes når du skriver:
Beviser det noget? Jeg kan da også sammensætte en serie af forskellige aldre og hvor gennemsnittet er et helt tal selv om man ikke lige tror det ved første øjekast. MJen beviser det noget?
Pointen er at der intet logisk i vejen for at resultatet faktisk mkunen være et helt tal. Hvorvidt det er sandsynligt er en anden sag. :^)
Men man kan altås ikke kigge på en masse tal mog sige det bliver ikeke t heltal.
Jeg påstår på ingen måder at du skulle være en idiot (og, det har jeg ingen grund til at tro at du skulle være!) - jeg påpegede såmæn bare at 16/02-2008 22:46:14 på ingen måde var et brugbart argument for at det ikke kunne være et heltal. :^)
Dim Command1 As New SqlCommand("SELECT AVG(CAST(DATEDIFF(year, Fødselsdato, [Op# dato])) AS FLOAT) AS GennemSnit FROM HCV WHERE Årstal = '" & Årstal & "'", Connection)
Jeg har prøvet direkte i SQL databasen men der opstår en fejl (jeg har faktisk lige rodet lidt med CAST men kunne ikke få det til at virke): Incorrect syntax near CAST expected AS
Det var nu også mig som rodede med parenteserne denne gang:
Dim Command1 As New SqlCommand("SELECT AVG(CAST(DATEDIFF(year, Fødselsdato, [Op# dato]) AS FLOAT)) AS GennemSnit FROM HCV WHERE Årstal = '" & Årstal & "'", Connection)
Dim Command1 As New SqlCommand("SELECT ROUND(AVG(CAST(DATEDIFF(year, Fødselsdato, [Op# dato]) AS FLOAT)), 1) AS GennemSnit FROM HCV WHERE Årstal = '" & Årstal & "'", Connection)
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.