sql - 如何根据另一个字段计算字段值?

标签 sql ruby-on-rails ruby postgresql

我有 EmailEvent 表。这是存储打开和点击的 STI 表(通过使用 type 属性)。我现在有这段代码,它提供有关有多少电子邮件使用收件人地址(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)

它生成这样的代码:

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"

我需要提供有关每个 email_address 有多少打开和点击的信息。我不能使用 count(id) 因为它会给我打开和点击,所以我需要以某种方式使用 type 属性但我无法弄清楚如何它应该工作。有人可以给我建议我应该在这里做什么吗?

最佳答案

替换这个

count(distinct email_id) as emails_count

在 SQLServer 中使用 case 或 IIF 之类的东西

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

关于sql - 如何根据另一个字段计算字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43081670/

相关文章:

mysql 从 $_GET 从另一个表中选择表

sql - Mysql 使用 JOIN 和 WHERE 语句。这是什么区别?

ruby-on-rails - 在亚马逊 EC2 上使用 capistrano 部署到生产环境时, Assets 不会预编译

ruby-on-rails - 你能在 HAML css 中插入 ruby​​ 变量吗?

mysql - 检查关系是否存在

sql - 小表上没有索引?

ruby-on-rails - 创建操作后,Merit 不会为用户添加积分

ruby-on-rails - 如何在 Rails 应用程序中列出所有邮件程序

ruby - self.class_eval <<DEF ... DEF

ruby - 如何将路由映射到 Sinatra 中的 Controller ?