MySQL vraagje

Pagina: 1
Acties:
  • 409 views

Vraag


Acties:
  • 0 Henk 'm!

  • Evatar
  • Registratie: Juli 2012
  • Laatst online: 14-05 11:08
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


Acties:
  • 0 Henk 'm!

  • mvrhrln
  • Registratie: Mei 2013
  • Laatst online: 25-11-2023
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 ]


Acties:
  • 0 Henk 'm!

  • 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.

Acties:
  • 0 Henk 'm!

  • ShitHappens
  • Registratie: Juli 2008
  • Laatst online: 23-05 16:21
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 ;)

Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 23:49
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.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 22-05 08:46

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.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.