2012-04-23 20 views
1

同じクエリで別の計算に計算フィールドを使用するクエリを作成しようとしていますが、エラーが発生しています。同じクエリで新しい計算の計算フィールドを再利用

この操作は、別の方法でどのように行うことができますか。

問合せ:

SELECT MIN(q.order_created) AS first_ordered,   
     MAX(q.order_created) AS last_ordered, 
     SUM(IF(DATE_ADD(q.order_created,INTERVAL 12 MONTH) >= NOW(),pq.product_qty,0))/12 AS monthly_rate,      
     SUM(pq.product_qty) AS yearly_sales, 
     SUM((pq.product_cost_price * pq.product_qty) - pq.product_total_price) AS **net_sold**, 
     SUM(pq.product_cost_price * pq.product_qty) AS **total_ordered**, 
     **100 - ((total_ordered - net_sold)/total_ordered)*100 AS discount**, 
     q.billing_account_id AS custid 
FROM quotes q 
LEFT JOIN products_quotes pq 
    ON q.id = pq.quote_id 
WHERE pq.product_id = '28e96e3d-460f-49fc-7d52-4f390b86d6b8' 
    AND q.deleted = 0 
    AND pq.deleted = 0 
GROUP BY q.billing_account_id 
ORDER BY q.order_created 
GROUP BY q.billing_account_id 
ORDER BY q.order_created 

はエラーを与える:不明な列は 'フィールドリスト' に 'total_ordered'。

答えて

1

最初は、SUMのような集計関数を使用することはできません。そのような集計関数は、最終結果がクエリの結果セットを完了している間に計算されるため、構文エラーがなくても計算結果は無効です。私が話したように、その

SELECT MIN(q.order_created) AS first_ordered,   
     MAX(q.order_created) AS last_ordered, 
     SUM(IF(DATE_ADD(q.order_created,INTERVAL 12 MONTH) >= NOW(),pq.product_qty,0))/12 AS monthly_rate,      
     SUM(pq.product_qty) AS yearly_sales, 
     SUM((pq.product_cost_price * pq.product_qty) - pq.product_total_price) AS net_sold, 
     SUM(pq.product_cost_price * pq.product_qty) AS total_ordered, 
     100 - ((SUM(pq.product_cost_price * pq.product_qty) - SUM((pq.product_cost_price * pq.product_qty) - pq.product_total_price))/SUM(pq.product_cost_price * pq.product_qty))*100 AS discount, 
     q.billing_account_id AS custid 
FROM quotes q 
LEFT JOIN products_quotes pq 
    ON q.id = pq.quote_id 
WHERE pq.product_id = '28e96e3d-460f-49fc-7d52-4f390b86d6b8' 
    AND q.deleted = 0 
     AND pq.deleted = 0 
GROUP BY q.billing_account_id 
ORDER BY q.order_created 
GROUP BY q.billing_account_id 
ORDER BY q.order_created 

注意、の構文を:
そして、第二の問題は、あなたがこの1のような他の方法を使用することもできますので、あなたは、同じクエリの同じselect句で別名を使用できないことですこのクエリは有効ですが、結果は&ではありません。正しい方法は(サブクエリの使用のように)もう少し時間がかかります。

関連する問題