Выполните вычисления на двух строках из запроса UNION

0

У меня есть следующий запрос

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 ответ

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, но логика эквивалентна.

  • 0
    Используйте count (), а не sum ().
  • 0
    Я думаю, что это должно быть оператором case в функции SUM
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню