SQL Kennis

  • Beste CP'ers,


    Het lijkt er steeds op dat het SQL niveau op CP heel laag is. Daarom wil ik een uitdaging starten. De bedoeling is heel simpel: Je moet een select-query schrijven die aan de informatie behoefte voldoet. We beginnen met de volgende database structuur. Creëer dus een database, en voer de volgende query's uit.



    Een belangrijke toelichting: Orginal is een INT die kan verwijzen naar een record in de eigen tabel (messages). Wanneer orginal NULL is, is het zelf een origineel bericht, anders is het een bewerking. Let op! Je kunt dus ook een bewerking op een bewerking hebben!


    Vervolgens stoppen we de volgende populatie in onze database:


    De informatie behoefte (vraag) is als volgt: Geef een lijst van alle gebruikers met het aantal keer dat zij een bericht hebben gewijzigd.


    De verwachte populatie is als volgt:


    Oplossingen graag via PB, en NIET hier!


    Voorlopig is er geen prijs, tenzij iemand nog iets in de aanbieding heeft, of een ander crewlid iets leuks bedenkt. Alle goede inzendingen worden in ieder geval gemeld!


    Dus criminalspoint laat zien wat je kunt!


    Allemaal veel succes, en ik hoop op veel deelname.

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Inderdaad inmiddels heb ik in totaal 4 inzendingen, namelijk van:
    Niels, JeroenH, Darsstar en MrMees.


    MrMees is er nog niet helemaal uit, en Darsstar heeft zelfs twee oplossingen gegeven (één met subquery, en één met join).


    Binnenkort zal ik een nieuwe uitdaging plaatsen! Dus jullie hebben nog even de tijd.:cheer::cheer:

  • Ik hoop natuurlijk op nog meer inzendingen!


    Morgen kom ik waarschijnlijk met een nieuwe informatie behoefde. Dus voor iedereen weer een nieuwe query, natuurlijk wel een beetje moeilijker.;)

    Nieuwe reactie samengevoegd met originele reactie op 06.12.09 19:51:33:
    Ik begin met de vorige inzendingen, deze kwamen van:
    JeroenH
    Niels
    Darsstar
    MrMees
    Alle inzendingen waren goed!


    De orginele oplossing die ik had was:

    PHP
    SELECT a.id, a.name, COUNT(m.orginal) AS num_edits FROM authors a LEFT JOIN messages m ON m.author_id = a.id GROUP BY m.author_id


    Toevoegingen hieraan zijn:
    JeroenH:

    Citaat

    Hoewel ik eigenlijk geen count wilde gebruiken op InnoDB vanwege de performance.


    InnoDB is hier inderdaad niet snel in. Echter, het gaat nu even om je kunnen, en we kampen nu eenmaal even met het feit dat we MySQL gebruiken (Iedereen draait MySQL, daarom heb ik voor MySQL gekozen).


    Darsstar:

    PHP
    SELECT
        a.id,
        a.name,
        (SELECT COUNT(*) FROM messages m WHERE m.author_id = a.id AND orginal IS NOT NULL) AS num_edits
    FROM
        authors a
    ORDER BY
        id


    Een mooie oplossing met een subquery.


    Een nieuwe uitdaging voor jullie! De nieuwe informatie behoefte is:


    Geef van alle auteurs het ID en de naam het aantal berichten, de gemiddelde lengte van hun berichten (afgerond), de naam het gastenboek waarin ze de meeste berichten hebben geplaatst, en voor hoeveel procent de berichten in dat gastenboek van de auteur is. Order de resultaten op het aantal berichten.


    Het verwachte resultaat is:

    PHP
    id      name     num_messages   avg_length      most_posted     procent
    1       Stefan   7              16      Mijn gastenboek         43
    6       Anne     6              15      Blog gastenboek         33
    2       Henk     4              15      Mijn gastenboek         75
    3       Jan      3              15      Mijn gastenboek         67
    5       Els      3              15      Mijn gastenboek         67
    7       Niels    2              15      Mijn gastenboek         100
    4       Connie   2              15      Mijn gastenboek         100
    8       Barrie   2              15      Appels & Co             50
    9       Ronnie   1              15      Mijn gastenboek         100


    Deze is echt niet makkelijk! Veel succes dus. De bedoeling is het resultaat in ??n query. Lukt je dat niet, mag je het ook met een view proberen, of met PHP (meerdere query's). Meerdere oplossingen is alleen maar leuk!

  • PHP
    id 	name 	num_messages 	avg_length 	most_posted 	procent
    1 	Stefan 	7 	16 	Mijn gastenboek 	7
    6 	Anne 	6 	15 	Mijn gastenboek 	6
    2 	Henk 	4 	15 	Mijn gastenboek 	4
    5 	Els 	3 	15 	Mijn gastenboek 	3
    3 	Jan 	3 	15 	Mijn gastenboek 	3
    4 	Connie 	2 	15 	Mijn gastenboek 	2
    7 	Niels 	2 	15 	Mijn gastenboek 	2
    8 	Barrie 	2 	15 	Appels & Co 	2
    9 	Ronnie 	1 	15 	Mijn gastenboek 	1


    Alleen de procenten lukken niet echt!


    En bij Anne is most_posted anders, maar dat komt denk ik omdat het bij elk gastenboek 33,33333 procent is.
    Maakt dit uit?

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!