Archief - SQL query meest voorkomende 'Having count'

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Prodigy

Legacy Member
Ik zit met een kleine oefening waar ik niet meer aan uitraak. Ik heb 2 tabellen, Uitgever en Boeken.

Uitgever: 'uitgever', 'uitg_id'
Boeken: 'boeknaam', 'boek_id'


Met een query moet ik te weten komen welke uitgever de meeste boeken uitgebracht heeft. Ik heb al een stukje code gemaakt, zonder foutmeldingen maar ook zonder enige output.
Code:
SELECT uitg_id, uitgever, COUNT(*) as meesteAantal
FROM Uitgever, Boeken
WHERE Uitgever.uitg_id = Boeken.uitg_id
GROUP BY uitg_id, uitgever
HAVING COUNT(*)=
    (SELECT MAX(uitgevercount) FROM
        (SELECT uitg_id,COUNT(*) AS uitgevercount
         FROM Boeken
         group by uitg_id) t1)

Kan iemand mij aantonen waar mijn fout zit?

kris

Legacy Member
Database structuur :
id van uw tables : noem het ook gewoon 'id'.
uitgever : het is een naam voor die uitgever, noem het dan ook 'naam'.
boek : het is een naam voor dat boek, noem het dan ook 'naam'.

SELECT u.id, u.naam FROM Uitgevers as u
INNER JOIN Boeken as B on B.uitgever = u.id
GROUP BY u.id
HAVING COUNT(*) = (
SELECT MAX(hoeveelheid) FROM (
SELECT COUNT(*) AS hoeveelheid FROM Boeken GROUP BY uitgever) AS B);

In uw voorbeel geeft 'HAVING COUNT(*)' geeft altijd 1 en die is nooit gelijk met bvb 14.

Download u gewoon mysql en TEST uw queries.

metalleke

Legacy Member
kris zei:
Database structuur :
id van uw tables : noem het ook gewoon 'id'.
uitgever : het is een naam voor die uitgever, noem het dan ook 'naam'.
boek : het is een naam voor dat boek, noem het dan ook 'naam'.

Inderdaad.

Code:
SELECT *
FROM uitgever
WHERE uitg_id IN (
  SELECT uitg_id
  FROM boeken
  GROUP BY uitg_id
  HAVING count(uitg_id) = (
    SELECT count(uitg_id)
    FROM boeken 
    GROUP BY uitg_id 
    ORDER BY count(uitg_id) DESC 
    LIMIT 1
  )
)

http://sqlfiddle.com/#!2/6a4e1/4
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan