L'utilisation efficace de SQL GROUP BY, SUM, COUNT

J'ai une table de vente de produits qui peuvent se présenter comme suit:

product   | amount   | ptype    | pdate      
p1        | 1.00     | sale     | 01/01
p1        | 2.00     | base     | 01/02
p2        | 1.50     | sale     | 02/03
p3        | 5.25     | base     | 10/10

et je voudrais construire un tableau qui montre un produit par ligne, la somme des montants, si le produit est unique de montrer le type d'autre de montrer le type de 'VAR', si le produit est unique afficher la date à laquelle le reste de la voir comme NULL. De sorte que le résultat se présente comme suit:

product   | total    | ptype    | pdate      
p1        | 3.00     | VAR      | (NULL)
p2        | 1.50     | sale     | 02/03
p3        | 5.25     | base     | 10/10

Je suis d'accomplir le résultat que j'ai besoin en procédant comme suit:

SELECT DISTINCT product
,(SELECT SUM(amount) FROM T as b GROUP BY b.product HAVING a.product = b.product ) as total
,(SELECT CASE WHEN COUNT(*) = 1 THEN a.ptype  ELSE 'VAR' END from T as b GROUP BY b.product HAVING a.product = b.product) as ptype
,(SELECT CASE WHEN COUNT(*) = 1 THEN a.pdate  ELSE NULL END from T as b GROUP BY b.product HAVING a.product = b.product) as pdate
FROM T as a

Mais je voudrais savoir si il existe un moyen plus efficace qui accomplit le même résultat.

OriginalL'auteur Daniel Vaca | 2012-06-29