2012-02-27 3 views
1

Question rapide si quelqu'un a le temps de répondre. La requête en cours fonctionne très bien, mais je dois également obtenir un décompte total des commandes et de l'expédition totale. Je sais que les chiffres sont rejetés à cause des jointures.Requête SQL avec nombre, somme et groupe par

Je sais que mon comte et somme sera:

count(DISTINCT orders.id) AS num_orders, 
SUM(orders.shipping_cost_ex_tax) AS shipping 

Je pense que je dois utiliser le compte et la somme dans la sélection et gérer le reste dans la jointure d'origine, mais pour la vie de moi Je ne peux pas comprendre ça.

Toute aide serait appréciée, même si c'est "lancer une requête séparée". Merci tout le monde.

requête actuelle:

SELECT 
    IF(products.categories LIKE '68', 'Shirts', 'Books') AS group_key, 
    CONCAT(order_products.name) AS product_name, 
    brands.name AS author, 
    SUM(order_products.quantity) AS num_units, 
    CASE WHEN products.sku LIKE '%-WB' THEN 'Combo' 
     WHEN products.sku LIKE '%-BO' THEN 'Box' 
     ELSE '' 
    END AS item_type, 
    SUM(IF(order_products.discount IS NULL, order_products.price_ex_tax, (order_products.price_ex_tax - order_products.discount))) AS income 
FROM orders 
INNER JOIN order_products ON order_products.bc_order_id = orders.bc_id 
INNER JOIN products ON order_products.bc_product_id = products.bc_id 
INNER JOIN brands ON products.brand_id = brands.bc_id 
WHERE (orders.created_at BETWEEN '2012-01-28 00:00:00' and '2012-02-21 23:00:00') 
GROUP BY group_key, 
case when products.brand_id = '68' 
then products.name 
else products.sku 
end 
+0

Quel produit SQL utilisez-vous? –

+0

Si les jointures vous rebutent et pas toutes les autres manigances, j'essaierais de retravailler avec des sous-requêtes qui font de petites parties du travail. De même, votre 'revenue' peut être écrit' SUM (order_products.price_ex_tax - COALESCE (order_products.discount, 0)) 'et votre' CONCAT (order_products.name) 'est le même que' order_products.name'. –

+0

Merci Daniel. J'aurais dû le savoir mais je ne l'ai pas fait. – livinginink

Répondre

0

regardant le commentaire fourni et ne pas avoir votre schéma complet devant moi. Est-ce que quelque chose comme ce travail:

Table Report 
( 
    id, 
    countOrders, 
    countSales, 
    countShipping, 
    countTax, 
    datePublished 
) 

Table SoldProducts 
( 
    id, 
    price,  
    tax, 
    shippingPrice, 
    datePurchased 
) 

Alors ce que vous feriez dans ce cas est de générer un rapport en interrogeant de SoldProducts alors vous persisteront le rapport qui a été généré.

+0

Désolé, j'aurais dû clarifier ça un peu. Ceci est un rapport d'administration pour afficher les ventes pour une période donnée. La première section concerne uniquement les totaux globaux (nombre de commandes, ventes totales, total des frais d'expédition, total des taxes). En dessous, il y a une ventilation par produits vendus, avec le montant total de la vente et le nombre d'unités par produit. – livinginink

+0

@ChrisYount J'ai mis à jour ma réponse, cela peut aider à rendre les choses plus faciles à mesure que plus de ces rapports sont générés. – Woot4Moo