2017-09-28 2 views
1

J'ai cette requête ...Somme MySQL Alias ​​Table

CREATE VIEW CustOrderItems AS 
SELECT CustFirstName, CustLastName, OrderNumber, OrderDate, ShipDate, 
QuantityOrdered * QuotedPrice AS ItemTotal 
FROM Customers NATURAL JOIN Orders NATURAL JOIN Order_Details; 

Après le regroupement des commandes comme celui-ci ...

SELECT CustFirstName, CustLastName, OrderNumber, OrderDate, ShipDate, 
QuantityOrdered * QuotedPrice AS ItemTotal 
FROM Customers NATURAL JOIN Orders NATURAL JOIN Order_Details 
GROUP BY OrderNumber 
ORDER BY OrderNumber ASC; 

Je sais besoin de calculer la somme de tous ajouté de la ItemTotal ensemble?

Toute aide est très appréciée!

+1

Avez-vous essayé 'somme (* QuantityOrdered QuotedPrice)' –

+0

Sur un Sidenote: Mieux * jamais * utiliser 'NATUREL JOIN'. Supposons que quelqu'un ajoute une colonne 'remarque' à la fois' Customers' et 'Orders' et soudainement votre requête est cassée. Utilisez toujours les critères de jointure explicite avec 'ON' ou' USING' à la place. –

+1

Je pensais que ça allait être plus compliqué que ça ... maintenant je me sens bête. Oh et on m'a demandé spécifiquement d'utiliser NATURAL JOIN dans cette requête. Merci @MKhalidJunaid –

Répondre

1

Comme cela a déjà été mentionné dans un commentaire, vous obtenez des sommes dans SQL avec SUM, ce qui ne devrait pas être une grande surprise. Il semble étrange que vous sachiez sur GROUP BY, mais pas sur SUM. À ce stade, je voudrais recommander de toujours agréger avant de rejoindre, pas après. Vous voulez des commandes avec leurs informations client et leur prix total. Alors choisissez parmi les commandes, rejoignez-vous avec les clients, rejoignez les prix totaux. Une fois que vous voulez agrégats de différentes tables, cette approche vous permettra d'économiser quelques problèmes.

SELECT 
    c.CustFirstName, 
    c.CustLastName, 
    o.OrderNumber, 
    o.OrderDate, 
    o.ShipDate, 
    od.OrderTotal 
FROM Orders o 
JOIN Customers c ON c.CustomerNumber = o.CustomerNumber 
JOIN 
(
    SELECT 
    OrderNumber, 
    SUM(QuantityOrdered * QuotedPrice) AS OrderTotal 
    FROM Order_Details 
    GROUP BY OrderNumber 
) od ON od.OrderNumber = o.OrderNumber 
ORDER BY o.OrderNumber ASC;