我有一个名为“警报”的表,看起来像这样。
user_id event alert_type
1 imp s
2 imp b
3 imp b
3 clk b
6 imp b
9 imp s
9 clk s
2 clk b
6 clk b
17 imp p
18 imp p
19 imp s
11 imp b
14 imp s
1 clk s
11 clk b
15 imp p
15 clk p
20 imp b
21 imp b
22 imp p
23 imp s
24 imp s
23 clk s
18 clk p
29 imp b
29 clk b
16 imp p
16 clk p
27 imp s
28 imp s
我正在尝试为result = clk/imp
我想要的输出是
alert_type result
b 0.7143
p 0.6
s 0.375
我试图这样做,但我知道这是非常低效的。
select
((select alert_type,count(*) from alerts where alert_type = 'b' and event = 'clk') /
(select alert_type,count(*) from alerts where alert_type = 'b' and event = 'imp')) result
from dual;
请以简洁的方式帮助我实现所需的输出。
答案 0 :(得分:1)
你可以尝试这样的事情:
SELECT
alert_type,
(SUM(`event` = 'clk' ) / SUM(`event` = 'imp')) AS result
FROM alerts
WHERE alert_type ='b'
GROUP BY alert_type
注意:强>
由于MySQL
布尔表达式解析为0/1
,因此您可以在用例中将其大写。
SUM(a=b) returns 1 only if a is equal to b
更多:由于我使用了SUM
代替COUNT
,因此您不必担心DIVIDE BY ZERO
错误。