Unieke waarden binnen query tellen

Status
Niet open voor verdere reacties.

ThijGer

Gebruiker
Lid geworden
6 mei 2009
Berichten
19
Hallo

Ik heb de volgende query gemaakt:
Code:
SELECT FOTOS.Circus, FOTOS.Jaar, FOTOS.Album, Count(FOTOS.Nummer) AS AantalVanNummer
FROM FOTOS
GROUP BY FOTOS.Circus, FOTOS.Jaar, FOTOS.Album;

Echter nu krijg ik bij aantalvannummer het totaal aantal, wat logisch is met deze functie, maar daar zitten ook dubbele waardes tussen.
Ik zou graag het totaal van de unieke velden FOTOS.Nummer willen.

Kan iemand mij hier mee helpen?
Alvast bedankt
 
Je kunt hiervoor de functie DISTINCT gebruiken. Je code zou dan volgens mij zoiets worden:

Code:
SELECT FOTOS.Circus, FOTOS.Jaar, FOTOS.Album, Count(DISTINCT FOTOS.Nummer) AS AantalVanNummer
FROM FOTOS
GROUP BY FOTOS.Circus, FOTOS.Jaar, FOTOS.Album;

Hier meer informatie over de DISTINCT functie

Groet,
Jan
 
Hallo Jan,

Bedankt voor de snelle reactie. deze manier had ik ook al geprobeerd alleen dan krijg ik de melding:
Syntaxisfout (operator ontbreekt) in query-expressie Count (Distinct FOTOS.Nummer).
 
Acces doet daar wel eens moeilijk over. Als je het in een subquery zet doet hij het vaak wel

Code:
SELECT FOTOS.Circus, FOTOS.Jaar, FOTOS.Album, COUNT(FOTOS.Nummer) AS AantalVanNummer
FROM
(SELECT DISTINCT FOTOS.Nummer FROM FOTOS)
GROUP BY FOTOS.Circus, FOTOS.Jaar, FOTOS.Album;

Ik weet niet of het helemaal correct is zo, heb hem niet getest. Hier kun je er meer informatie over vinden.
 
Jammer genoeg werkt het in een sub query ook niet, zijn er nog andere mogelijkheden?
 
Ik weet niet of het een privé tabel of iets dergelijks is, maar kun je hem anders misschien hier plaatsen of mij sturen via een prive berichtje? Dan zal ik voor je kijken of ik je kan helpen. Dan kan ik het wat makkelijker testen
 
Count (Distinct FOTOS.Nummer) is in ieder geval onzin, want dat kan helemaal niet. DISTINCT kun je hooguit voor in de query zetten: SELECT DISTINCT krijg je dan. Maar dat helpt in dit geval niet, omdat je dat effect al bereikt doordat je de Group By optie gebruikt. Ik heb nog even in de db gekeken die je mij ooit gestuurd had, maar daar zitten geen records in de tabel Foto's. Hooguit in de tabel Programma's, waar ook dezelfde soort gegevens inzitten, op het veld Album na. Is die tabel vergelijkbaar? En wat wil je eigenlijk zien? Ik ben waarschijnlijk een beetje te dom, want ik snap de vraag niet :).
 
Het lukt me niet de database hier te plaatsen omdat deze groter is als 100kB. Tabellen zijn wel vergelijk baar. Wat ik namelijk doe is elke foto heeft een eigen nummer. Maar de foto kan meerdere keren ingevoerd worden omdat er bijvoorbeeld meerdere personen opstaan. Als ik uit eindelijke in een query het aantal foto's in een album wil weten, wil ik niet het aantal ingevoerde foto's weten, maar het aantal unieke nummers van de foto's.

Hopelijk heb ik het zo wat duidelijker omschreven. ik kan ook de huidige database naar u sturen, om het te bekijken.
Alvast bedankt.
 
Ik maak vaak 2 query. De eerste maakt een unieke lijst met alle nummer via de groupby functie. De 2de query telt het aantal uit de eerste query
 
Je mag me uiteraard de nieuwe versie opsturen, dan kijk ik daar naar. Ik vermoed namelijk dat je structuur dan niet helemaal klopt. Tenminste: als ik het verhaal nu goed lees...
 
Zou u mij een PB kunnen sturen met uw mail adres? Dan kan ik de DB versturen.
 
Got it :).
Ik heb je db bekeken, en zoals ik al vermoedde, heb je (vind ik dan) een probleem met je tabel. Die is niet genormaliseerd namelijk. De tabel foto's (buiten het ID veld dat niet meetelt) 10 velden, waarvan er één uniek zou moeten zijn (Fotonummer), 8 velden attributen zijn van de foto en één veld niet thuishoort in de tabel. En dat ene veld (Artiest) zorgt nu voor je probleem. Er is overigens nóg een overbodig veld (volgens mij heb ik je daar in een andere tabel ook al op gewezen, want daar zit hetzelfde veld in) dat weg kan: het veld Jaar. Want ik mag aannemen dat je in het veld [Datum] eigenlijk de opnamedatum van de foto zou willen opslaan. En als je dat doet, dan heb je ook gelijk het jaar. Nu staat er in Datum overigens niks, en dan is het veld Jaar weer nuttig. En kan het veld Datum natuurlijk weg... Hoe dan ook: één van de twee is overbodig.
Nu moet je dus, om één artiest aan een foto te helpen, 8 overbodige velden herhalen! Als dát geen dubbel werk is...

OK, hoe zou het dan moeten? In de tabel Fotos dien je alleen gegevens op te slaan die bij de foto horen. Zoals de opnamedatum, de fotograaf, de lokatie, het Circus en eventueel het veld Album. Dat laatste is nog een vraag; als je meerdere albumgegevens hebt, dan dient dat ook te verdwijnen. Het veld [Artiest] is dus geen gegeven (attribuut) van de foto. Hoe weet ik dat? Simpel door het gegeven dat je één foto aan meerdere artiesten wilt hangen. Daarmee geef je dus aan dat een artiest niet uniek bij een foto hoort. Wat moet je dan wel doen? Een aparte tabel maken voor de artiesten (heb je in Personen verwerkt) en een aparte tabel voor de foto's per artiest, laten we zeggen: Foto_Artiest. Met dus een ID, een veld FotoID (Fotonummer of ID, maar Fotonummer zou uniek moeten zijn dus een sleutel) en ArtiestID. Dat laatste veld komt dan uit Personen en is nu het ID veld.
Resultaat: je tabel Fotos bevat altijd unieke foto's die er maar één keer instaan. Tellen gaat dus gewoon met de query waarmee je de vraag begon. En geeft het juiste aantal. Volgende vraag? :D.
 
Bedankt voor de uitgebreide uitleg. Ik zal vanavond het eens gaan proberen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan