为什么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;
我正在尝试查找 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;