Het dashboard heeft een aantal milestones waaronder "meeste achtbanen op één dag" en "Meeste ritten op één dag". Nu komt het (heel sporadisch) wel eens voor dat we meerdere parken op één dag bezoeken. Deze zou ik dan samen willen voegen. Op dit moment doe ik dat zo:
SELECT *
FROM ritten
INNER JOIN pretparken ON ritten.pretparkid=pretparken.pretparkid
GROUP BY ritten.datum, pretparken.pretparkid
ORDER BY count_achtbanen DESC, ritten.datum ASC, pretparken.pretpark ASC LIMIT 0,10;
Dit levert een lijst met de 10 dagen waarop we de meeste verschillende achtbanen bereden, maar gaat daarbij voorbij aan dagen waarop we 7 achtbanen in het ene en 3 achtbanen in het andere park deden, waardoor deze dag mogelijk in de top 10 zou kunnen komen.
Zou het mogelijk zijn de query aan te passen zodat deze de waardes "meerdere parken" en "ritten opgeteld" bevat?
?Onbekende gebruiker
21-02-2022 16:41
Ja, dat kan.
(
Dan moet je SUM(aantal) gebruiken in SELECT, en pretparken.pretparkid uit GROUP BY halen.
Eventueel kan je SUM(aantal) DESC gebruiken in ORDER BY.
)
Oh shoot, ik had * geplaatst omdat het anders zoveel informatie zou worden, maar mijn query select op dit moment alleen "pretparken.pretparkid, pretparken.pretpark, ritten.datum, DATE_FORMAT(ritten.datum, "%d-%m-%Y") AS datum_formatted, COUNT(ritten.achtbaanid) AS count_achtbanen", m.a.w. ik doe al een COUNT, maar zodra ik de pretparkid uit de GROUP BY zou halen, krijg ik wel het juiste aantal, maar slechts één park ipv beide (of nog meer) parken.
Dank voor de tips tot dusver, morgen eerst eens kijken naar de versie van MySQL op m’n server, denk dat die nog te oud is, althans als ik snel kijk naar de links zie ik 8.0 staan, mag ik er dan van uitgaan dat het met v5 niet gaat lukken?
[size=xsmall]Toevoeging op 22/02/2022 07:28:59:[/size]
Onderstaande levert precies dat wat ik zocht:
SELECT
pretparken.pretparkid,
pretparken.pretpark,
ritten.datum,
DATE_FORMAT(ritten.datum, "%d-%m-%Y") AS datum_formatted,
COUNT(ritten.achtbaanid) AS count_achtbanen,
GROUP_CONCAT(DISTINCT(pretparken.pretpark)) AS pretparken
FROM ritten
INNER JOIN pretparken ON ritten.pretparkid=pretparken.pretparkid
GROUP BY ritten.datum
ORDER BY count_achtbanen DESC, ritten.datum ASC, pretparken.pretpark ASC
LIMIT 0,10
Hierbij is het resultaat van "pretparken" een komma gescheiden waarde met de betreffende pretparken.
[size=xsmall]Toevoeging op 22/02/2022 07:46:08:[/size]
Aangezien het goed mogelijk is dat er een komma in de naam van het pretpark zal zitten op den duur, heb ik ervoor gekozen een andere separator toe te passen en daarnaast heb ik een sortering toegevoegd:
GROUP_CONCAT(DISTINCT(pretparken.pretpark) ORDER BY pretpark ASC SEPARATOR "|") AS pretparken
Voor de volledigheid, op dit moment gebruik ik deze query en die geeft geen foutmelding:
SELECT
GROUP_CONCAT(DISTINCT(pretparken.pretpark) ORDER BY pretpark ASC SEPARATOR "|") AS pretparken,
ritten.datum,
DATE_FORMAT(ritten.datum, "%d-%m-%Y") AS datum_formatted,
COUNT(ritten.achtbaanid) AS count_achtbanen
FROM ritten
INNER JOIN pretparken ON ritten.pretparkid=pretparken.pretparkid
GROUP BY ritten.datum
ORDER BY count_achtbanen DESC, ritten.datum ASC
LIMIT 0,10