У меня есть следующий запрос
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, но логика эквивалентна.
SUM