Pourquoi ne puis-je pas effectuer une fonction d'agrégation sur une expression contenant un agrégat, mais je peux le faire en créant une nouvelle instruction select autour d'elle?

Pourquoi est-il que dans SQL Server, je ne peux pas faire ça:

select  sum(count(id)) as 'count'
from    table

Mais je peux faire

select sum(x.count)
from
(
    select  count(id) as 'count'
    from    table   
) x

Sont-ils pas essentiellement la même chose? Comment suis-je censé être de penser à ce sujet afin de comprendre pourquoi le premier bloc de code n'est pas autorisé?

  • La première façon dont devrait fonctionner aussi. Quelle est l'erreur que vous obtenez?
  • soins à part l'erreur que vous obtenez lorsque vous exécutez d'abord sql. Il doit s'exécuter correctement.
  • Une Agrégation Scalaire (Pas de GROUP BY) renvoie toujours exactement une ligne. Dans quelles circonstances serait-il judicieux d'appliquer une agrégation pour qu'une ligne? Un vecteur d'agrégation retourne une ligne par groupe. Alors que parfois il peut être utile d'appliquer une autre agrégation, à la suite de cela, vous auriez besoin d'un autre GROUP BY appliquée pour les deux agrégats pour que cela soit utile.
  • Bien qu'ayant dit qu'il ressemble à Sybase permet cela et juste suppose implicitement que l'agrégat externe est un scalaire
  • La Norme SQL-92 interdit explicitement l'imbrication des agrégats de La <value expression> simplement contenues dans <set function specification> ne doit pas contenir un <set function specification> ou un <subquery>
  • Mis simplement, aggregate(aggregate(...)) est impossible car il n'y a aucun moyen de spécifier GROUP BY ... OVER (GROUP BY ...). I. e. si nous voulions nid agrégats, nous devons aussi être en mesure de nid GROUPE BYs, que nous n'avons pas été autorisés (encore?). Vous dites il n'y a pas de GROUPE BYs dans votre exemple? Mais il y a, à savoir GROUP BY (), qui est toujours implicite lorsqu'il n'est pas spécifié explicitement.
  • Pourquoi j'ai une erreur quand je fais seulement - ( select count(id) as 'count' partir de la table ) x ?

InformationsquelleAutor Michael A | 2012-05-25