アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、3つのテーブルを結合して、特定の場所のみ件数を表示するSQLを作成しようとしています。
MySqlバージョン5.0.27

レイアウト的には以下の感じです。
販売員テーブル
販売員ID 店舗ID 販売員名
   1    1 販売員A
   2    1 販売員B
   3    2 販売員C
   4    2 販売員D
   5    3 販売員E

店舗テーブル
店舗ID  店舗名
  1   店舗A
  2   店舗B
  3   店舗C

売却履歴
履歴ID 販売員ID  売却日  会員フラグ
  1    1  2007/11/01     1
  1    1  2007/10/01     0
  1    2  2007/10/01     1
  1    2  2007/10/01     1
  1    3  2007/09/01     1
  1    4  2006/01/01     0

結果
販売員ID 販売員名 店舗名 販売回数 会員勧誘回数
   1  販売員A 店舗A     2      1
   2  販売員B 店舗A     2      2
   3  販売員C 店舗B     1      1
   4  販売員D 店舗B     0      0
   5  販売員E 店舗C     0       0

販売回数は今年度の範囲内で検索をかけています。(日にちが2007/01/01以上)

現在テーブルを連結して表示までは出来るのですが、履歴の内容を日付で絞りカウントして持ってくる処理が成功しません。

結合のSQLは以下の通りです
SELECT 販売員.*, 店舗.店舗名,履歴.*
FROM ( 販売員 LEFT JOIN 店舗 ON 販売員.店舗ID = 店舗.店舗ID)
LEFT JOIN 履歴 ON 販売員.販売員ID = 履歴.販売員ID

結合時にCOUNT等の処理や条件を使って日付で絞り込む方法がいまいちよくわからない状況です。

ご教授よろしくお願いいたします。

A 回答 (1件)

会員勧誘回数は、会員フラグの集計ですね?



SQL例です。参考にしてください。

select
H.販売員ID,販売員名,店舗名,
coalesce(販売回数,0) as 販売回数,
coalesce(会員勧誘回数,0) as 会員勧誘回数
from 販売員 as H
left join 店舗 as S on H.店舗ID=S.店舗ID
left join
(select
販売員ID,
count(*) as 販売回数,
sum(case when 会員フラグ=1 then 1 else 0 end) as 会員勧誘回数
from 売却履歴
where 売却日>='2007-01-01'
group by 販売員ID) as x
on H.販売員ID=x.販売員ID
order by H.販売員ID
;
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます。無事解決いたしました。
それにしても……ここまで複雑になるんですね。
まだ条件が増やされそうですが、例を元に何とかなりそうです。
ありがとうございました。

お礼日時:2007/11/15 19:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す