如何解决MySQL Show counts without subquery 访问点击次数想要的结果
我有下表
Id | source_url | target_url | event_type |
---|---|---|---|
1 | googlecom | mypageurl/example | 0 |
2 | googlecom | mypageurl/otherpage | 0 |
3 | googlecom | mypageurl/example | 0 |
4 | googlecom | mypageurl/example | 0 |
5 | mypageurl/example | 其他域/示例 | 1 |
6 | mypageurl/example | 其他域/示例 | 1 |
7 | mypageurl/otherpage | 其他域/示例 | 1 |
这里的 event_type = 0
是访问,event_type = 1
是点击
使用以下查询,我可以在每个网址上获得访问
SELECT
target_url,COUNT(target_url) AS visits
FROM
tbl_events
WHERE
event_type = 0 AND target_url <> ''
GROUP BY
target_url
ORDER BY
visits
DESC
;
访问
target_url | 访问次数 |
---|---|
mypageurl/example | 3 |
mypageurl/otherpage | 1 |
通过以下查询,我可以获得点击
SELECT
source_url,COUNT(source_url) AS clicks
FROM
event_tracking
WHERE
event_type = 1 AND source_url <> ''
GROUP BY
source_url
ORDER BY
clicks
DESC
;
点击次数
source_url | 点击次数 |
---|---|
mypageurl/example | 2 |
mypageurl/otherpage | 1 |
想要的结果
我希望我的最终结果如下不使用子查询(因为原始表包含超过 100 万行并且子查询花费的时间太长)
url | 点击次数 | 访问次数 |
---|---|---|
mypageurl/example | 2 | 3 |
mypageurl/otherpage | 1 | 1 |
现在,我觉得我必须创建一个临时表并使用 ON DUPLICATE KEY UPDATE
并使用 url 作为主键,但我觉得可能有更好的方法,我想不出。
不使用子查询和临时表,有没有什么办法可以达到这个结果?
解决方法
试试这个
SELECT URL,SUM(click)click,SUM(VISIT)visit FROM
(
SELECT CASE WHEN event_type=0 THEN target_url ELSE source_url END url,SUM(CASE WHEN event_type = 0 THEN 1 ELSE 0 END)visit,SUM(CASE WHEN event_type = 1 THEN 1 ELSE 0 END)click
FROM urlData
GROUP BY target_url,source_url,event_type
) A GROUP BY URL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。