Toon posts:

MySQL vraagje

Pagina: 1
Acties:
  • 325 views

Vraag


  • Evatar
  • Registratie: Juli 2012
  • Laatst online: 17-03 11:32
Mijn vraag

ik zou de personen moeten hebben die exact 2 adressen hebben en hiervan de persoon zijn naam, id en de straatnaam.

ik heb 3 tabellen:
code:
1
2
3
address met id (pk) en street
person met id (pk) en name
person_address met person_id (fk) en address_id (fk)


Relevante software en hardware die ik gebruik
ik gebruik de MySQL Workbench

Wat ik al gevonden of geprobeerd heb
code:
1
2
select p.name, p.id, a.street from person p, address a, person_address pa 
where p.id = pa.person_id and a.id = pa.address_id;

ik heb een poging gedaan hier een "and count(pa.person_id) = 2" aan toe te voegen maar dan krijg ik een invalid use of group function error.

Jullie zien waarschijnlijk ook wel dat dit een soort huistaak is maar ik wil graag de oplossing weten zodat ik het mogelijks kan snappen. Afstandsonderwijs laat veel te wensen over op vlak van begeleiding. |:(

Alle reacties


  • mvrhrln
  • Registratie: Mei 2013
  • Laatst online: 23:18
trefwoorden, "group by" en "having"
tip: de count gebruik je in combinatie met de having

[Voor 49% gewijzigd door mvrhrln op 23-03-2021 22:59]


  • Psychokiller
  • Registratie: Oktober 2001
  • Niet online
De vraag is vrij duidelijk en zegt eigenlijk twee queries:
1. Geef me iedereen met 2 adressen
2. Geef me de extra informatie die hierbij hoort

1: bepaal het userid van iedereen met twee adressen en gebruik een group by en een having

2: join het resultaat van 1 als geheel naar de rest van de informatie. Niet alles in één join dus en niet alles in 1 groupby dus.

  • ShitHappens
  • Registratie: Juli 2008
  • Laatst online: 00:24
Klopt, als je een COUNT gaat doen, móet dat gepaard gaan met een GROUP BY clausule.

Heb even geen db bij de hand, maar theoretisch gezien zou (iets dat lijkt op) dit moeten werken:

SQL:
1
2
3
4
5
SELECT
    pa.person_id
FROM person_address pa
GROUP BY pa.person_id
HAVING COUNT(pa.person_id) = 2


Hier zorgt GROUP BY voor een groepering van de resulterende records. Vervolgens kun je in de HAVING clause aggregatie methodes toepassen, zoals COUNT. Daar mag je HAVING grofweg vergelijken met een variant op WHERE. Echter werkt WHERE vóór de GROUP BY, HAVING op het resultaat erna.

Maar goed, dan heb je nu enkel de person id's, dan zou 't nu met een extra JOIN of subquery moeten gaan lukken de rest van de data erbij te halen ;)

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 23:01

CurlyMo

www.pilight.org

Psychokiller schreef op dinsdag 23 maart 2021 @ 23:02:
De vraag is vrij duidelijk en zegt eigenlijk twee queries:
[...]
Niet alles in één join dus en niet alles in 1 groupby dus.
Puur om de theorie zuiver te houden. Wat waarschijnlijk in deze fase veel te ver gaat voor TS. Maar met windows functies kan zoiets best prima in één join met één where.

geen vragen via PM die ook op het forum gesteld kunnen worden.


  • RobIII
  • Registratie: December 2001
  • Laatst online: 22:04

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

-O-
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.
We zijn hier doorgaans niet heel happig op kant-en-klare antwoorden en je maakt 't TS hier wel héél makkelijk zo.

@Evatar Ik hoop dat je toch de moeite neemt je te verdiepen in wat @mvrhrln en @Psychokiller je probeerden duidelijk te maken. Zoals je in onze Quickstart leest zien we hier ook graag wat je zelf al gezocht en gevonden hebt, wat er niet werkte aan het gevondene etc. en dat mis ik nu. Ook een topictitel die de lading een beetje dekt is wel fijn voor een volgende keer.

[Voor 25% gewijzigd door RobIII op 23-03-2021 23:13]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij

Pagina: 1

Dit topic is gesloten.


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee