如何在单个列中划分值并将结果存储在MySQL中的另一列中

时间:2016-08-14 03:13:31

标签: mysql sql

我有一个名为“警报”的表,看起来像这样。

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的新列

我想要的输出是

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;

请以简洁的方式帮助我实现所需的输出。

1 个答案:

答案 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错误。