[Access2003] Gemiddelde van cellen in een selectiequerie

Pagina: 1
Acties:

  • Primusman
  • Registratie: Augustus 2004
  • Laatst online: 16-09-2015
Een simpele vraag met waarschijnlijk een nog simpeler antwoord, kan 't zelf alleen niet vinden. 8)7 Ik heb in een database een enquête staanmet numerieke antwoorden. Ik wil graag een selectiequerie hebben van 3 vragen en het gemiddelde van die 3 vragen. Dat gaat op zich prima, maak een querie met vraag 1, 2, 3 en een expressie Gem: ([Tabel.V1]+[Tabel.V2]+[Tabel.V3])/3. Ik heb echter ook Null waarden en zodra er Null waarden bestaan werkt bovenstaande niet.

Als ik Gem: Gem([Patiënten.V24]+[Patiënten.V25]+[Patiënten.V26]) gebruik krijg ik de foutmelding: "U probeert een querie uit te voeren waarbij de opgegeven expressie V1 geen deel uitmaakt van een statistische functie". Ik weet niet wat nu de juiste expressie is. Ben al een paar uur aan het klooien, kan iemand het me ff voorzeggen :?

  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 22-08 17:19
post je query tot nu toe eens?

ach...in een volgend leven lach je er om!


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Je hebt toch een AVG functie?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Primusman
  • Registratie: Augustus 2004
  • Laatst online: 16-09-2015
SELECT Patiënten.V24, Patiënten.V25, Patiënten.V26, Avg([Patiënten.V24]+[Patiënten.V25]+[Patiënten.V26]) AS G1
FROM Patiënten;

zo is ie met Avg en dus de foutmelding (omdat Avg gemiddelden berekent van hetzelfde veld bij verschillende records en niet van 3 velden van 1 record)

  • Force
  • Registratie: Januari 2000
  • Laatst online: 31-07-2023

Force

Kan iemand ff me neus afvegen?

even geen zin om het verder uit te zoeken, maar dit zou je je op weg kunnen helpen:

gem: (iif(tabel.v1=null;0;[tabel.v1]) + iif(tabel.v2=null;0;[tabel.v2]) + iif(tabel.v3=null;0;[tabel.v3]))/3

maw: zoek eens op iif

Leven is als een pijpkaneel, iedereen zuigt eraan en krijgt zijn deel.


  • Primusman
  • Registratie: Augustus 2004
  • Laatst online: 16-09-2015
Die had ik idd ook al gevonden, ik wil echter niet dat een Null-waarde als 0 gelezen wordt. Als er twee waarden staan en een Null-waarde moet er gedeeld worden door 2. Ik ben dus op zoek naar een functie die een gemiddelde neemt en Null-waarden niet meeneemt in het gemiddelde.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

code:
1
(nz([v1])+nz([v2])+nz([v3])) / (3+IsNull([v1])+IsNull([v2])+IsNull([v3]))

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Force
  • Registratie: Januari 2000
  • Laatst online: 31-07-2023

Force

Kan iemand ff me neus afvegen?

zo heb ik ooit het gemiddelde van 1 veld berekend, en worden de 0 waarde niet meegeteld, misschien dat je hem om kan bouwen:

code:
1
IIf(Som([v1])=0;0;(Som([v1])/Abs(Som([v1]<>0)))/1000)

Leven is als een pijpkaneel, iedereen zuigt eraan en krijgt zijn deel.


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 16:05

Dido

heforshe

Primusman schreef op donderdag 24 maart 2005 @ 22:25:
SELECT Patiënten.V24, Patiënten.V25, Patiënten.V26, Avg([Patiënten.V24]+[Patiënten.V25]+[Patiënten.V26]) AS G1
FROM Patiënten;
Ten eerste probeer je nu het gemiddelde te berekenen van de som van je velden en dat is niet wat je wilt.
Ten tweede heb je hier een group by nodig op alle andere velden.

Je zult inderdaad zelf een formule moeten bouwen voor het gemiddelde wat jij wilt, en heel blij zijn dat je maar drie velden hebt.
Iets in de trant van

((v24+v25+v26)/(iif(v24=0;0;1)+iif(v25=0;0;1)+iif(v26=0;0;1)))

De afvragingen die hierboven bij de som staan, zijn wat onzinnig, aangezien je ze gewoon onvoorwaardelijk op wilt tellen. Het is alleen je deler die variabel is.

Overigens gaat mijn voorbeeld zwaar kapot als alle drie de velden 0 zijn. Als dat voor kan komen zul je dat apart moeten ondervangen!

Wat betekent mijn avatar?


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Dido schreef op vrijdag 25 maart 2005 @ 08:58:
[...]

((v24+v25+v26)/(iif(v24=0;0;1)+iif(v25=0;0;1)+iif(v26=0;0;1)))

De afvragingen die hierboven bij de som staan, zijn wat onzinnig, aangezien je ze gewoon onvoorwaardelijk op wilt tellen. Het is alleen je deler die variabel is.

Overigens gaat mijn voorbeeld zwaar kapot als alle drie de velden 0 zijn. Als dat voor kan komen zul je dat apart moeten ondervangen!
Niet helemaal onzinnig: in access geldt: 4 + null+ 5 = null. Zijn alle drie de velden null of 0 dan is #error een logische uitkomst. Vandaar mijn eerdere 'formule'.

Wat ook mag:
(nz(v1)+nz(v2)+nz(v3)) / (abs((not isnull(v1)) + (not isnull(v2)) + (not isnull(v3))))

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 16:05

Dido

heforshe

Niesje schreef op vrijdag 25 maart 2005 @ 10:21:
Niet helemaal onzinnig: in access geldt: 4 + null+ 5 = null. Zijn alle drie de velden null of 0 dan is #error een logische uitkomst. Vandaar mijn eerdere 'formule'.
Je hebt helemaal gelijk. Ik weet echter niet of access een null teruggeeft voor een numeriek veld waarvoor wel een record occurrence bestaat, of een 0.
(m.a.w.: wat is de default default value voor een numeriek veld? Er staat me iets van bij dat dat 0 is, dus dan staat er nooit null in als het record is aangemaakt.)

Als alle velden 0 zijn is een error inderdaad logisch.

Wat betekent mijn avatar?


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Dido schreef op vrijdag 25 maart 2005 @ 10:31:
[...]

Je hebt helemaal gelijk. Ik weet echter niet of access een null teruggeeft voor een numeriek veld waarvoor wel een record occurrence bestaat, of een 0.
(m.a.w.: wat is de default default value voor een numeriek veld? Er staat me iets van bij dat dat 0 is, dus dan staat er nooit null in als het record is aangemaakt.)

Als alle velden 0 zijn is een error inderdaad logisch.
Ook jij hebt helemaal gelijk :). Standaard defaultwaarde is 0, maar primusmann schrijft dat hij een tabel met null waarden heeft. Overigens, als die tabel genormaliseerd zou zijn dan had hij het probleem helemaal niet.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Primusman
  • Registratie: Augustus 2004
  • Laatst online: 16-09-2015
Ben er uit, heb meerdere tips gecombineerd _/-\o_ :

iif(abs((not isnull(Patiënten.V24)) + (not isnull(Patiënten.V25)) + (not isnull(Patiënten.V26)))=0,null,(nz(Patiënten.V24)+nz(Patiënten.V25)+nz(Patiënten.V26)) / (abs((not isnull(Patiënten.V24)) + (not isnull(Patiënten.V25)) + (not isnull(Patiënten.V26))))) AS G1

De mogelijke antwoorden van de enquête waren 0,1,2,3,4,5,nvt waarbij ik de waarde van nvt null liet zijn (standaardwaarde heb ik altijd op null staan). Als er drie maal null is 'ingevuld' blijft de uitkomst null en nu geen #error. Verder wordt de deler aangepast aan het aantal gegeven antwoorden. Het is nu allemaal nogal omslachtig, maar het werkt wel. :)

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Fijn dat het werkt, maar... ik vind dat abs(not etc) in je als voorwaarde wel erg lelijk. Je test gewoon op het voorkomen van drie null waarden. Dan schrijf je dat toch ook gewoon op?

= iif(isNull(v24) AND isNull(v25) AND IsNull(V26);NULL; ETC)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Primusman
  • Registratie: Augustus 2004
  • Laatst online: 16-09-2015
Je hebt helemaal gelijk, heb het meteen maar gewijzigd. Denk dat ik nu sowieso wel erg moeilijk aan het doen ben, maar het werkt in ieder geval.
Pagina: 1