我有一个事件表,用于存储用户的事件,我想获取用户的事件数量,并且在结果中也有第一个事件日期,以便我可以随时查看数据。
示例表称为“事件”,它有2列
user_id VARCHAR(50)
event_name VARCHAR(50)
event_time TIMESTAMP
user_ids都是唯一的,事件名称可以是login,sent_message,likes_post
例如,如何查询每个用户发送的总消息数以及他们首次登录的时间,即user_id首次登录的event_time?
答案 0 :(得分:1)
如果您使用的是Postgres 9.4或更高版本,则可以使用FILTER
子句来限制聚合中的内容:
SELECT user_id,
COUNT(event_time) FILTER (WHERE event_name = 'sent_message') AS messages_count,
MIN(event_time) FILTER (WHERE event_name = 'login') AS first_login
FROM events
GROUP BY user_id
否则你可以使用CASE
,但它更详细:
SELECT user_id,
COUNT(CASE WHEN event_name = 'sent_message' THEN 1 ELSE NULL END) AS messages_count,
MIN(CASE WHEN event_name = 'login' THEN event_time ELSE NULL END) AS first_login
FROM events
GROUP BY user_id
答案 1 :(得分:-1)
GROUP BY
和aggregate functions是您的朋友。每位用户发送的邮件总数:
SELECT user_id, COUNT(event_time)
FROM table
WHERE event_name = 'sent_message'
GROUP BY user_id
首次登录:
SELECT user_id, MIN(event_time)
FROM table
WHERE event_name = 'login'
GROUP BY user_id