从UNION查询中对两行执行计算

时间:2018-04-06 01:57:26

标签: mysql sql

我有以下查询

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

1 个答案:

答案 0 :(得分:1)

你根本不需要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,我没有看到详细程度的特殊优势,但逻辑是等效的。

相关问题