2017-03-28 17 views
0

私はEmailEventテーブルを持っています。これは、(type属性を使用して)オープンおよびクリックを格納するSTI表です。私は開いてどのように多くの情報を提供する必要がフィールド値を別のフィールドに基づいてカウントするにはどうすればよいですか?

SELECT email_address, count(distinct email_id) as emails_count 
FROM "email_events" 
WHERE "email_events"."deleted_at" IS NULL 
    AND (type = 'OpenEmailEvent' OR type = 'ClickEmailEvent') 
    AND "email_events"."email_id" IN (85487, 75554, 85489, 77184, 78562, 75587, 82879, 85535, 85534) 
    AND (created_at between '2017-02-28 22:52:01.000000' AND '2017-03-29 05:59:59.000000') 
GROUP BY "email_events"."email_address" 

と:それは、このようなコードを生成

EmailEvent.where("type = 'OpenEmailEvent' OR type = 'ClickEmailEvent'") 
.where(email_id: email_ids).happened_between_dates(start_date, end_date) 
.select("email_address, count(distinct email_id) as emails_count") 
.group(:email_address).reorder(nil) 

:私は今、電子メールが受信者のアドレス(email_addressフィールド)を使用してどのように多くの情報を提供し、このコードを持っていますそこにはemail_addressのクリック数があります。私はを使用することができません。なぜなら、私は開くとクリックの両方を与えるので、何とかtype属性を使用する必要がありますが、正確にどのように動作するのかわかりません。私はここで何をすべきですか?

答えて

2

場合やIIF

sum(case when type = 'OpenEmailEvent' then 1 else 0 end) [Opens], 
sum(case when type = 'ClickEmailEvent' then 1 else 0 end) [Click], 
+0

を使用してSQLServerの中のようなものに、この

count(distinct email_id) as emails_count 

を置き換える私はまだことを必要とするので、私はemails_count'として '回数(個別のEMAIL_ID)、それを削除する必要はありませんあなたのコードはまさに私が必要としていたものです!ありがとうございました! – ExiRe

関連する問題