Comprendre les fonctions de regroupement SQL : résoudre l'erreur « pas une fonction de groupe à groupe unique »
Dans SQL, les fonctions de groupe telles que SUM( ) regroupe les valeurs sur plusieurs lignes, en les regroupant dans une colonne spécifique. Cependant, lorsque vous tentez de combiner une fonction de groupe avec une expression de colonne individuelle dans l'instruction SELECT, l'erreur « pas une fonction de groupe à groupe unique » se produit. Cette erreur se produit lorsque la fonction de groupe opère sur un sous-ensemble de données dans le même groupe que l'expression de colonne individuelle.
Pour résoudre ce problème, envisagez les options suivantes :
1 . Supprimez la fonction de groupe :
La suppression de la fonction SUM() invalide la valeur agrégée, ne laissant que l'expression de colonne individuelle.
2. Supprimez l'expression de colonne individuelle :
L'élimination de la colonne SSN de l'instruction SELECT résoudra l'erreur en renvoyant la valeur additionnée maximale.
3. Ajoutez une clause GROUP BY complète :
L'inclusion de toutes les expressions de colonne individuelles dans la clause GROUP BY garantit que chaque ligne appartient à un groupe distinct, correspondant à la portée de la fonction de groupe. Cependant, cette option peut ne pas convenir si vous avez l'intention de regrouper sur plusieurs colonnes et d'avoir des valeurs uniques pour chaque combinaison.
Requête alternative pour la récupération :
Pour le donné Afin de trouver le SSN du client avec le maximum de téléchargements, une requête alternative est recommandée :
SELECT TOP 1 SSN, SUM(TIME) AS TotalTime FROM downloads GROUP BY SSN ORDER BY TotalTime DESC;
Cette requête récupère le SSN et le total temps de téléchargement pour chaque SSN, trié par ordre décroissant en fonction de la durée totale. La clause TOP 1 limite le résultat au SSN avec la durée totale la plus élevée.
Alternativement, si plusieurs clients partagent la même durée totale maximale, la requête suivante peut être utilisée :
SELECT SSN, SUM(TIME) AS TotalTime FROM downloads GROUP BY SSN HAVING SUM(TIME) = (SELECT MAX(SUM(TIME)) FROM downloads GROUP BY SSN);
Cette requête révisée récupère tous les SSN liés à la durée totale maximale de téléchargement, garantissant ainsi qu'aucune information n'est perdue.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!