2011-01-24 12 views
2

特定の部門の各セールスマンについて過去7日間の合計売上と売上を含むレポートを作成する必要があります。私は、セールスマンの日付、金額、ID、セールスマンを部門にマッピングする別のテーブルを各セールスについて列挙したテーブルを持っています。SQL - 合計と毎週合計の2つのサブクエリを結合する

週間と合計の両方を1回のクエリで表示するにはどうすればよいですか?

それぞれのクエリは次のとおりです。

SELECT user_id,sum(amount) AS total_amount 
FROM sales 
LEFT JOIN users 
ON sales.user_id = users.id 
WHERE users.department = 1 
GROUP BY user_id 

SELECT user_id,sum(amount) AS total_amount 
FROM sales 
LEFT JOIN users 
ON sales.user_id = users.id 
WHERE users.department = 1 AND date > (NOW()-INTERVAL 1 WEEK) 
GROUP BY user_id 

私はテーブルのいずれかのビューを作成し、これを行うことができますが、私はそこに特定の部門のレコードを(必要があるので、多くの場合)、すべての部門の結果を生成するビューを使用すると効率が悪いようです。ここで

答えて

4

は、1つの表スキャンの両方を照会するための方法です:

SELECT user_id 
,  sum(amount) as total 
,  sum(case when date > (NOW()-INTERVAL 1 WEEK) then amount end) as weekly 
FROM sales 
LEFT JOIN 
     users 
ON  sales.user_id = users.id 
WHERE users.department = 1 
GROUP BY 
     user_id 

これにより、第2 sum()のうち、古い行をフィルタリングするcaseを使用しています。

+0

ありがとうございました!トリックをする! –

関連する問題