【发布时间】:2015-05-29 07:07:09
【问题描述】:
这是我的示例表
Logs
user_id, session_id, search_query, action
1, 100, dog, A
1, 100, dog, B
2, 101, cat, A
3, 102, ball, A
3, 102, ball, B
3, 102, kite, A
4, 103, ball, A
5, 104, cat, A
在哪里
miss = 对于相同的 user_id 和相同的会话 id ,如果操作 A 后面没有操作 B,则称为未命中。
注意:动作 B 只能在动作 A 发生后发生。
我能够找到所有用户和会话中每个唯一 search_query 的未命中计数。
SELECT l1.search_query, count(l1.*) as misses
FROM logs l1
WHERE NOT EXISTS
(SELECT NULL FROM logs l2
WHERE l1.user_id = l2.user_id
AND l1.session_id = l2.session_id
AND l1.session_id != ''
AND l2.action = 'B'
AND l1.action = 'A')
AND l1.action='A'
AND l1.search_query != ''
GROUP BY v1.search_query
order by misses desc;
我正在尝试为每个唯一的 search_query 找到miss_percentage=(未命中数/总行数)*100 的值。我不知道如何在同一个查询中找到有条件的计数和没有该条件的计数。任何帮助都会很棒。
expected output:
cat 100
kite 100
ball 50
【问题讨论】:
标签: sql postgresql amazon-redshift postgresql-8.4