Versio

MAX(COUNT(*))?

Overzicht Reageren

Jesper Diovo

Jesper Diovo

23/06/2008 21:19:00
Quote Anchor link
Hoi,

Ik had vandaag op school toets SQL. Ging allemaal hartstikke lekker, behalve een vraag. Het ging om een database met allerlei films, acteurs, regisseurs, etc. etc. De vraag was als volgt: welke regisseur regisseerde de meeste films?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
FILMS
----------------
id | dirnr | titel |
----------------

REGISSEURS
----------------------------
id | voornaam | achternaam |
----------------------------

Dat is de opbouw van de twee tabellen waar het hier om draait (films was nog uitgebreider, maar die doet er niet toe).

Nu moet ik dus de voor- en achternaam van de regisseur hebben waarbij het aantal films met zijn dirnr dus het hoogst is. Ik zat meteen aan MAX(COUNT(*)) te denken. Echter werkt deze syntaxis niet in MS Access.

Mijn query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT a.voornaam, a.achternaam, aantal
FROM regisseurs AS a
WHERE a.nr = (SELECT b.dirnr, COUNT(b.titel) AS aantal
  FROM films AS b
  GROUP BY b.dirnr
  HAVING COUNT(b.titel) = (SELECT MAX(COUNT(c.titel))
    FROM films AS c
    GROUP BY c.dirnr));


Alleen die werkte dus niet... De uiteindelijke uitkomst was Steven Spielberg met 21 films. Uiteindelijk heb ik een niet zo liquide manier opgeschreven, alleen redden we het daar natuurlijk niet mee. Ik ben erg benieuwd naar wat jullie zouden geven als oplossing.

- Jezpur
 
PHP hulp

PHP hulp

25/05/2012 08:50:05
Gesponsorde koppelingen:
 
Frank -

Frank -

23/06/2008 21:25:00
Quote Anchor link
En dirnr is hierbij het id van de regiseur? Dus de foreign key?
 
Robert Deiman

Robert Deiman

23/06/2008 21:25:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
  COUNT(f.*) AS aantal,
  r.voornaam,
  r.achternaam
FROM
  regisseurs AS r
LEFT JOIN
  films AS f
ON
  f.dirnr = r.id
GROUP BY
  r.id,
  r.voornaam,
  r.achternaam
ORDER BY
  aantal DESC
 
Jesper Diovo

Jesper Diovo

23/06/2008 21:26:00
Quote Anchor link
pgFrank schreef op 23.06.2008 21:25:
En dirnr is hierbij het id van de regiseur? Dus de foreign key?


Jep. Dirnr in films en id in regisseurs zijn gerelateerd aan elkaar.

Edit: @ Robert: het mag maar één resultaat geven, hè...
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
Frank -

Frank -

23/06/2008 21:28:00
Quote Anchor link
Zie de oplossing van Robert, dat is de juiste. Wellicht wil je nog een LIMIT 1 gebruiken, dan krijg je alleen de regiseur met het hoogste aantal films retour.

Ps. Zet nog even een MAX() om de COUNT(), dan zou je volgens mij ook maar 1 resultaat retour krijgen. Kon ook nog wel eens sneller zijn, er hoeft niet meer te worden gesorteerd. En dat kost altijd relatief veel tijd.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Jesper Diovo

Jesper Diovo

23/06/2008 21:29:00
Quote Anchor link
pgFrank schreef op 23.06.2008 21:28:
Zie de oplossing van Robert, dat is de juiste. Wellicht wil je nog een LIMIT 1 gebruiken, dan krijg je alleen de regiseur met het hoogste aantal films retour.


LIMIT werkt niet in Access.
 
Riemer

Riemer

23/06/2008 21:31:00
Quote Anchor link
Kun je niet TOP (net zoals ms-sql) gebruiken?
 
Frank -

Frank -

23/06/2008 21:31:00
Quote Anchor link
Access is dan ook een ***beep*** product. Zelfs in MySQL werkt LIMIT, dat wil wat zeggen!!! Nog zo'n hoop ***beeeeep*** waar je nooit mee wilt werken omdat het van A tot Z onbetrouwbaar is.
 
Jesper Diovo

Jesper Diovo

23/06/2008 21:33:00
Quote Anchor link
pgFrank schreef op 23.06.2008 21:31:
Access is dan ook een ***beep*** product. Zelfs in MySQL werkt LIMIT, dat wil wat zeggen!!! Nog zo'n hoop ***beeeeep*** waar je nooit mee wilt werken omdat het van A tot Z onbetrouwbaar is.


Ik weet het... Maar aangezien ze bij ons op school nogal uit de prehistorie stammen wat lesgeven betreft, bakken ze er hier ook niet veel van. Alle andere queries waren afschuwelijk makkelijk, dit was de enige waar ik niet uitkwam. Ik begin nu ook te begrijpen waarom :-P.
 
Riemer

Riemer

23/06/2008 21:33:00
Quote Anchor link
pgFrank, je kent Microsoft. Ze willen niks van anderen gebruiken maar ze maken liever hun eigen versie en de rest die opdringen (zie c-sharp, eigen versie java runtime, java-sharp en hier dus transact-SQL).
Gewijzigd op 01/01/1970 01:00:00 door Riemer
 
Robert Deiman

Robert Deiman

23/06/2008 21:34:00
Quote Anchor link
LIMIT werkt niet in ACCESS?

Misschien zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
TOP 1 COUNT(f.*) AS aantal,
  r.voornaam,
  r.achternaam
FROM
  regisseurs AS r
LEFT JOIN
  films AS f
ON
  f.dirnr = r.id
GROUP BY
  r.id,
  r.voornaam,
  r.achternaam
ORDER BY
  aantal DESC


Hmmm... daarom dus nooit MS access gebruiken om SQL te leren!!
 
Jesper Diovo

Jesper Diovo

23/06/2008 21:37:00
Quote Anchor link
Robert_Deiman schreef op 23.06.2008 21:34:
LIMIT werkt niet in ACCESS?

Misschien zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
TOP 1 COUNT(f.*) AS aantal,
  r.voornaam,
  r.achternaam
FROM
  regisseurs AS r
LEFT JOIN
  films AS f
ON
  f.dirnr = r.id
GROUP BY
  r.id,
  r.voornaam,
  r.achternaam
ORDER BY
  aantal DESC


Hmmm... daarom dus nooit MS access gebruiken om SQL te leren!!


Hm, dat ziet er interessant uit. Alleen kregen we een bijlage erbij met alle statements, en daar stond TOP niet bij, dus kan niet geloven dat dit echt de oplossing is die bedoeld wordt, maar ik geloof graag dat 'ie werkt :-).
 
Frank -

Frank -

23/06/2008 21:39:00
Quote Anchor link
MS heeft natuurlijk ook nog SQL Server, toch wel een redelijk product. Ik heb er nooit zelf mee gewerkt, maar toch wel aardig wat query-werk voor opgeleverd. De klanten zijn er altijd blij mee geweest, ik kan blijkbaar aardig raden hoe het moet werken... Gelukkig maar!

TOP
 
Jesper Diovo

Jesper Diovo

23/06/2008 21:43:00
Quote Anchor link
pgFrank schreef op 23.06.2008 21:39:
MS heeft natuurlijk ook nog SQL Server, toch wel een redelijk product. Ik heb er nooit zelf mee gewerkt, maar toch wel aardig wat query-werk voor opgeleverd. De klanten zijn er altijd blij mee geweest, ik kan blijkbaar aardig raden hoe het moet werken... Gelukkig maar!

TOP

Inderdaad, op zich wijkt de Access-SQL-syntaxis ook niet veel af hoor. Sommige dingen zijn alleen nét iets anders. Zoals LIMIT, en volgens mij hebben de WHERE, GROUP BY, HAVING en ORDER BY ook een andere volgorde. Maar daar valt nog over te twisten.

In ieder geval bedankt, weer iets geleerd (TOP! :-P). Misschien is dat nog wel eens handig voor de toekomst. We wachten de uitslag van de toets in ieder geval af :-).
 



Overzicht Reageren

Get Adobe Flash player