Self JOIN met een COUNT

Status
Niet open voor verdere reacties.

pianthony

Gebruiker
Lid geworden
27 sep 2012
Berichten
5
Beste vrienden,

ik heb eentje waar ik maar niet aan uit geraak, ik ben dan ook nog niet ver gevorderd in SQL, maar ik zou het graag begrijpen.
Ik ben al dicht bij de oplossing geweest, maar als ik het manueel controleer blijkt het steeds niet te kloppen.

Dit betreft een oefening over de presidenten van Amerika

Tabel admistratie
veld1: Admin_nr
veld2: Pres_naam
veld3: Year-Inaug
veld4: vice_pres

Ik moet de namen tonen van de presidenten die zelf ooit vice-president waren én hoeveel keer ze dat waren...

Is een self-join nodig?
Als het kan graag met wat uitleg waarom aub.

Hartelijk dank.
Anthony
 
Dit kan niet middels een self join.

Tardis
 
Er kan een hoop; mits ik je vraag goed begrijp, wil je weten hoe vaak een president die ook vicepresident is geweest, president was. Of wil je weten hoe vaak die persoon president was, en tegelijkertijd hoevaak vicepresident?

Code:
SELECT Vice.Pres_naam, Count(President.Admin_nr) AS AantalVanAdmin_nr
FROM admistratie AS Vice INNER JOIN admistratie AS President ON Vice.Pres_naam = President.vice_pres
GROUP BY Vice.Pres_naam;
 
Hallo Octafish,

dank je voor de hulp in ieder geval.

Om op je vraag te antwoorden:
Ik zou willen weten hoeveel van de presidenten vice-president zijn geweest, en als ze vice_president geweest zijn, hoeveel x.
Vb: Nixon is 2x vicepresident geweest, 8 jaar (2 ambtstermijnen) onder Eisenhower.
In de tabellen die wij gebruiken staan de presidenten en vice-presidenten volgens een ambtstermijn van 4 jaar en dus niet als opeenvolgende periode.
Niet alle presidenten zijn vice-presidenten geweest en omgekeerd.

Ik weet niet als dit van belang is, maar er is ook nog een andere tabel 'presidents' met Pres_naam als primary key. Hierin staan de gegevens van zijn geboorte, naam van zijn vrouw, wanneer hij geboren en gestorven is, geboortestaat,...)
Maar ik vermoed niet dat je hier speciaal een INNER JOIN wilt maken...

Ik hoop dat dit duidelijk uitgelegd is ;-)

mvg
Anthony
 
Dus je wilt de presidenten 1 x zien, en daarachter hoe vaak ze vice president zijn geweest?
 
Er kan inderdaad een hoop maar niet middels een SELF Join, zoals ik al eerder aangaf.
Op deze manier lukt het wel:

Code:
SELECT admistratie.Pres_naam, (SELECT COUNT(*) FROM admistratie AS admistratie_1 WHERE A.vice_pres= admistratie.Pres_naam) AS "Aantal keer vice president"
FROM admistratie
GROUP BY  admistratie.Pres_naam;

PS je noemt je tabel admistratie, als dat een typo is en administratie moet zijn, dan moet je de SQL daar even op aanpassen.

Tardis
 
Laatst bewerkt:
Zou je hier een export van de database structuur en inhoud kunnen plaatsen? (Tussen [SQL][/SQL] ;))
 
@Tardis: zo overbodig is het niet, het gaan met name om de inhoud.
Daarnaast zou ik graag aan de hand van een SQL Fiddle (http://www.sqlfiddle.com) queries willen proberen. Daarvoor is het handig om de juiste structuur en data te hebben.
 
Of zo:
Code:
SELECT vice_pres, Count(Admin_nr) AS Aantal
FROM admistratie
WHERE (vice_pres In (SELECT DISTINCT Pres_Naam FROM admistratie))
GROUP BY vice_pres;
 
Octafish, Tardis,

bedankt voor de oplossingen, mooi te zien dat het op verschillende manieren kan en te zien waar juist mijn foutjes zaten.
Ik 'wist' ergens diep van binnen dat het moest op te lossen 'zonder' een JOIN te doen, door met DISTINCT te werken, maar ik kwam er niet aan uit.

Ik heb toch weer wat bijgeleerd.

:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan