我有以下查询

SELECT count
FROM (
    SELECT count(id) as count FROM listens
    WHERE user='None'
    UNION
    SELECT count(id) as count FROM listens
    WHERE user!='None'
) as details


哪个返回

count
36793
112755


我想对两个值(例如36793 / 112755)执行除法,以便查询的输出为

count
0.3263092546

最佳答案

您根本不需要union!这是编写查询的一种简单得多的方法:

SELECT sum(user = 'None') / sum(user <> 'None')
FROM listens;


MySQL在数字上下文中将布尔表达式视为数字,其中0表示false,1表示true。以上计算符合条件的值的数量。

如果要冗长或与SQL的其他方言兼容,可以执行以下操作:

SELECT (sum(case when user = 'None' then 1 else 0 end) /
        sum(case when user <> 'None' then 1 end)
       ) as ratio
FROM listens;


如果您使用的是MySQL,那么详细程度没有特别的优势,但是逻辑是等效的。

关于mysql - 从UNION查询对两行执行计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49684102/

10-13 08:52
查看更多