sql - 带条件的加入 SQL 查询 MAX 聚合

标签 sql postgresql

我在使用 SQL 查询时遇到问题。这是我在 SQL Fiddle 上的模式的表示:

http://sqlfiddle.com/#!15/14c8e/1

问题是我想从 Invitations 表中返回数据行,并将它们与相关事件的“已发送”事件类型和“已查看”事件类型的总和以及最新的创建时间相结合。

我可以获得所有数据和计数,但 last_sent_on 有问题。有没有办法在 MAX 聚合函数中使用条件? 例如

MAX(
  SELECT events.created_at
  WHERE event_type='sent'
)

如果没有,我将如何编写正确的子选择?

我目前正在使用 Postgresql。

谢谢。

最佳答案

您可以在 max 中使用 case 语句,就像您在 sum 中所做的那样。下面的查询将为 event_type='sent'

选择最大的 created_at
SELECT
    i.id,
    i.name,
    i.email,
    max(case when e.event_type='sent' then e.created_at end) AS last_sent_on,
    sum(case when e.event_type='sent' then 1 else 0 end) AS sent_count,
    sum(case when e.event_type='viewed' then 1 else 0 end) AS view_count
FROM
    invitations i
LEFT OUTER JOIN
    events e
    ON e.eventable_id = i.id
WHERE e.eventable_type='Invitation'
GROUP BY i.id, i.name, i.email

SQLFiddle

关于sql - 带条件的加入 SQL 查询 MAX 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24977836/

相关文章:

postgresql - Bytea 到 postgresql 中的实际文本值

sql - 设计带有类型的组和带有类型的项目,其中项目类型与组类型相关

perl - 为 DBD::Pg 数据库连接设置超时

mysql - 我的 SQL 唯一值 - 意外结果

java - 如何更新然后选择更新的行

sql - 表 EMP 正在发生变化,触发器/函数可能看不到它错误

ruby-on-rails - rails : Why am I getting the ActiveRecord error "missing FROM-clause entry for table"?

mysql - SQL中表的第一个和第二个日期

php - 在多列mysql子查询中获取最高ID

postgresql - AWS ElasticBeanstalk amazon linux pg_config 与 psycopg2 错误