sql >> Database >  >> RDS >> Mysql

Voeg twee tabellen samen mysql, één op veel relatie

U moet GROUP BY . gebruiken om uit te leggen op welke groeperingen moet worden gerekend. Zonder GROUP BY je krijgt gewoon een enkele groep van de hele resultatenset, zoals je hebt gezien.

In standaard SQL is het noodzakelijk om in de GROUP BY . op te nemen clausule elke niet-geaggregeerde expressie die is opgenomen in de SELECT clausule, maar MySQL laat je wegkomen door dit niet te doen, waardoor een uitdrukking als de volgende mogelijk is. (Tenminste, wanneer niet in de strikte modus; ik weet niet zeker of de strikte modus deze vereiste versterkt om overeen te komen met standaard SQL)

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

Ervan uitgaande dat items.id is de primaire sleutel van deze tabel en zal dus niet in meer dan één rij met items voorkomen , dit zou het gewenste effect moeten hebben.

Zodra u GROUP BY . introduceert het is belangrijk om het verschil te begrijpen tussen de WHERE en HAVING clausules. De eerste past de voorwaarde voor . toe de groep en de aggregaten worden toegepast, terwijl de laatste achteraf . wordt toegepast . Dit betekent dat je HAVING . moet gebruiken als je een conditional wilt doen op basis van die telling; de WHERE clausule in uw eerste voorbeeld is van toepassing vóór het totaal, dus het resultaat is het aantal punten dat na de opgegeven datum is gemaakt.



  1. Hoe YEARWEEK() werkt in MariaDB

  2. Behoud ouder-kindrelaties bij het kopiëren van hiërarchische gegevens

  3. Validatie en invoeging van PHP-formulier met MySql

  4. Percentages berekenen met GROUP BY-query