sql >> Database teknologi >  >> RDS >> Mysql

Slut dig til to tabeller mysql, en til mange forhold

Du skal bruge GROUP BY at forklare hvilke grupperinger der skal tælles ud fra. Uden GROUP BY du får bare en enkelt gruppe af hele resultatsættet, som du så.

I standard SQL er det nødvendigt at inkludere i GROUP BY klausul hvert ikke-aggregeret udtryk, der er inkluderet i SELECT klausul, men MySQL lader dig slippe af sted med ikke at gøre dette, hvilket tillader et udtryk som det følgende. (I hvert fald, når den ikke er i streng tilstand; jeg er ikke sikker på, om streng tilstand styrker dette krav til at matche standard SQL)

SELECT `items`.*, COUNT(1) AS points
FROM `items` INNER JOIN `points` ON `items`.`id` = `points`.`item_id`
WHERE ...
GROUP BY `items`.`id`

Forudsat at items.id er den primære nøgle i denne tabel, og den vises derfor ikke i mere end én række elementer , bør dette have den ønskede effekt.

Når du introducerer GROUP BY det er vigtigt at forstå forskellen mellem WHERE og HAR klausuler. Førstnævnte anvender betingelsen før gruppen og aggregater anvendes, mens sidstnævnte gælder bagefter . Det betyder, at du skal bruge HAVING hvis du vil lave en betinget baseret på denne optælling; HVOR klausulen i dit første eksempel vil gælde før sammenlægningen, så resultatet vil være antallet af point, der er oprettet efter den givne dato.



  1. 2017 @ Severalnines:Vi fejrer vores kundehistorier

  2. Sådan gendannes en database med Backup Manager

  3. Hybrid Cloud PostgreSQL-implementeringstip

  4. Sådan opsætter du en forbindelsestimeout afhængig af brugerlogin i MySQL