MySQL 显示没有子查询的计数
MySQL Show counts without subquery
我关注table
编号
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
otherdomain/example
1
6
mypageurl/example
otherdomain/example
1
7
mypageurl/otherpage
otherdomain/example
1
这里event_type = 0
是访问,event_type = 1
是点击
使用以下查询,我可以在每个 url
上获得 visits
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
想要的结果
我希望我的最终结果如下 不使用子查询(因为原始 table 包含超过 100 万行和子查询花费的时间太长)
url
点击次数
访问次数
mypageurl/example
2
3
mypageurl/otherpage
1
1
现在,我觉得我必须创建一个临时的 table 并使用 ON DUPLICATE KEY UPDATE
并使用 url 作为主键,但我觉得可能有更好的方法我想不通。
有没有什么方法可以不使用子查询和临时查询来实现这个结果table?
试试这个
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
我关注table
编号 | 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 | otherdomain/example | 1 |
6 | mypageurl/example | otherdomain/example | 1 |
7 | mypageurl/otherpage | otherdomain/example | 1 |
这里event_type = 0
是访问,event_type = 1
是点击
使用以下查询,我可以在每个 url
上获得 visitsSELECT
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 |
想要的结果
我希望我的最终结果如下 不使用子查询(因为原始 table 包含超过 100 万行和子查询花费的时间太长)
url | 点击次数 | 访问次数 |
---|---|---|
mypageurl/example | 2 | 3 |
mypageurl/otherpage | 1 | 1 |
现在,我觉得我必须创建一个临时的 table 并使用 ON DUPLICATE KEY UPDATE
并使用 url 作为主键,但我觉得可能有更好的方法我想不通。
有没有什么方法可以不使用子查询和临时查询来实现这个结果table?
试试这个
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