2009-09-20 6 views

Répondre

2

question similaires:

Why does MySQL allow "group by" queries WITHOUT aggregate functions?

Ceci est spécifique à MySQL et n'est pas conforme à la norme ANSI SQL. La plupart des autres moteurs de base de données n'autorisent pas les colonnes sur lesquelles n'est pas groupé ou en cours d'exécution via une fonction d'agrégation.

Il semble que MySQL conserve la valeur de la première ligne correspondant aux critères. La fonction d'agrégat qui a ce comportement est FIRST(), et bien que MySQL l'implémente, cela semble être le comportement par défaut pour les colonnes qui ne sont pas groupées et qui ne sont pas exécutées par une autre fonction d'agrégation.

Dans la norme ANSI SQL que vous feriez:

SELECT FIRST(jobtitle), company FROM jobs GROUP BY company; 

Alors que dans MySQL, vous pouvez simplement (mais la norme ANSI fonctionne exactement aswell):

SELECT jobtitle, company FROM jobs GROUP BY company; 
+2

FWIW, SQLite prend également en charge cette non standard comportement de groupe par, mais SQLite renvoie la valeur de la * dernière * ligne correspondante dans le groupe. –

+0

Cette réponse est fausse: MySql ne supporte pas le mot clé FIRST (http://dev.mysql.com/doc/refman/5.1/fr/group-by-functions.html). En outre, une valeur de correspondance aléatoire est sélectionnée - pas nécessairement la valeur de la première ligne qui apparaît dans le groupe. –

Questions connexes