-1
$query = "SELECT sum(o.feeship) feeship_total,
(SELECT SUM(p.products_price) FROM products p 
 left join orders_products op on op.products_id = p.products_id  
 WHERE op.orders_id = o.orders_id) AS cost 
FROM orders o ";
$query .= " GROUP BY year(o.date_purchased), month(o.date_purchased)";
if ($sel_month<>0) 
    $query .= ", dayofmonth(o.date_purchased)";
$query .=  " ORDER BY o.date_purchased";

上記の SQL では、select sum products_price最初の注文のすべての製品のみ。(注文のすべての製品の) の合計方法はsum products_price、注文に従ってgroup byください。選択するために同じSQLを書く方法と同じように見えますfeeship_totalsum(cost)

4

1 に答える 1

0

これを試して:

SELECT YEAR(o.date_purchased) AS PurchaseYear, SUM(sub.ptotal) AS feeship_total
FROM orders o
INNER JOIN
( 
   SELECT op.order_id, SUM(p.products_price * op.quantity) as ptotal
   FROM products p
   LEFT JOIN order_products op ON p.product_id = op.product_id
   GROUP BY op.order_id
) sub ON o.order_id = sub.order_id
GROUP BY YEAR(o.date_purchased), MONTH(o.date_purchased)
ORDER BY 1;

注文のINNER JOINリストとテーブルからのその製品の数量の合計を返します。order_productsこれらの各製品には、テーブルからの対応する価格が掛けられproductsます。各結果セットからの列JOINの注文を含む this 結果セット。orderid次に、年を注文するGROUP BY場合は、任意の列を指定できます。GROUP BY

于 2012-06-21T08:11:09.587 に答える