sql >> Databasteknik >  >> RDS >> Mysql

Gå med två tabeller mysql, en till många relation

Du måste använda GROUP BY att förklara vilka grupperingar man ska räkna utifrån. Utan GROUP BY du får bara en enda grupp av hela resultatuppsättningen, som du såg.

I standard SQL är det nödvändigt att inkludera i GROUP BY klausul varje icke-aggregerat uttryck som ingår i SELECT klausul, men MySQL låter dig komma undan med att inte göra detta, vilket tillåter ett uttryck som följande. (Åtminstone när det inte är i strikt läge; jag är inte säker på om strikt läge förstärker detta krav för att matcha standard SQL)

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

Förutsatt att items.id är den primära nyckeln i den här tabellen, så den kommer inte att visas i mer än en rad med items , bör detta ha önskad effekt.

När du introducerar GROUP BY det är viktigt att förstå skillnaden mellan WHERE och HAVING klausuler. Den förra tillämpar villkoret före gruppen och aggregaten tillämpas, medan det senare tillämpas efteråt . Det betyder att du måste använda HAVING om du vill göra ett villkor baserat på den räkningen; WHERE klausulen i ditt första exempel kommer att gälla före sammanräkningen, så resultatet blir antalet poäng som skapats efter det givna datumet.



  1. Börja blogga för HTML5 och CSS3

  2. PHP PDO MySQL IN (?,?,?

  3. pandas read_sql med en lista med värden för WHERE-villkoret

  4. Matrisdatatyp, delad sträng,