为什么INTEGER/INTEGER不给我一个答案SQL?

Why doesn't INTEGER/INTEGER does not give me an answer in SQL?

我正在尝试查找 SQL 中收到的消息的成功率。因此,我创建了一个带有消息 ID 和操作(已发送或已接收)的 table,然后我数了数。收到的 msgs/total 没有。消息。这是我的代码:

CREATE TABLE msg (id INTEGER, action TEXT);
INSERT INTO msg VALUES (1, 'sent');
INSERT INTO msg VALUES (1, 'received');
INSERT INTO msg VALUES (2, 'sent');
INSERT INTO msg VALUES (2, 'received');
INSERT INTO msg VALUES (3, 'sent');
INSERT INTO msg VALUES (4, 'sent');
INSERT INTO msg VALUES (5, 'sent');

SELECT SUM(CASE WHEN action = 'received' THEN 1 ELSE 0 END)/COUNT( DISTINCT id) AS success_rate FROM msg;

这给了我 0 作为输出。为什么?

因为你的数据库做整数除法。简单加个小数点:

SELECT SUM(CASE WHEN action = 'received' THEN 1.0 ELSE 0 END) / COUNT(DISTINCT id) AS success_rate
FROM msg;

我可能想除以发送的数量——以防万一:

SELECT (SUM(CASE WHEN action = 'received' THEN 1.0 ELSE 0 END) /
        SUM(CASE WHEN action = 'sent' THEN 1.0 END)
       ) AS success_rate
FROM msg;

或者在两种情况下都通过唯一帐户:

SELECT (COUNT(DISTINCT CASE WHEN action = 'received' THEN id END) /
        COUNT(DISTINCT id)
       ) AS success_rate
FROM msg;

如果 id 是独一无二的(这对我来说似乎是合理的),这可以简化为:

SELECT AVG(CASE WHEN action = 'received' THEN 1.0 ELSE 0 END) AS success_rate
FROM msg;