Maison > Questions et réponses > le corps du texte
P粉1558329412023-08-24 13:38:21
Si vous définissez la désactivation dans la clause ONLY_FULL_GROUP_BY
服务器模式(默认情况下),您的查询将在 MYSQL
中运行。但在本例中,您使用的是不同的 RDBMS。因此,为了使您的查询正常工作,请将所有非聚合列添加到您的GROUP BY
, par exemple
SELECT col1, col2, SUM(col3) totalSUM FROM tableName GROUP BY col1, col2
Une colonne non agrégée signifie que la colonne ne sera pas transmise aux fonctions d'agrégation, telles que SUM
、MAX
、COUNT
etc.
P粉0900872282023-08-24 10:30:14
Supposons que j'ai le tableau suivantT
:
a b -------- 1 abc 1 def 1 ghi 2 jkl 2 mno 2 pqr
J'exécute la requête suivante :
SELECT a, b FROM T GROUP BY a
La sortie doit avoir deux lignes, une pour a=1
,第二行为 a=2
.
Mais que doit montrer la valeur de b dans ces deux lignes ? Il existe trois possibilités pour chaque cas, et rien dans la requête n'indique clairement quelle valeur choisir pour b dans chaque groupe. Le sens est très vague.
Cela démontre la Règle de valeur unique qui interdit d'obtenir des résultats non définis lors de l'exécution d'une requête GROUP BY et d'inclure tout critère de colonne dans la liste de sélection qui ne fait pas partie du regroupement ni n'apparaît dans les fonctions d'agrégation (SUM, MIN, MAX, etc. .).
La réparation pourrait ressembler à ceci :
SELECT a, MAX(b) AS x FROM T GROUP BY a
Maintenant, vous souhaitez évidemment le résultat suivant :
a x -------- 1 ghi 2 pqr