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