2014-01-14 4 views
0

У меня есть таблица SQL со следующей схемой:Элегантный способ выбрать фракцию, удовлетворяющие ИНЕКЕ

{playerId, playSessionLength, временная метка}

Я хотел бы найти, в пределах некоторого диапазона времени , процент игровых сеансов, составляющих менее 10 секунд.

Я знаю, как сделать это некрасиво, с двумя запросами:

select count(*) from playData where timestamp > start and timestamp < end 
select count(*) from playData where timestamp > start and timestamp < end and playSessionLength < 10 

А затем делают разделение B/A.

Мой вопрос, что является самым чистым, самым элегантным способом сделать это с помощью одного запроса?

ответ

1

Я хотел бы попробовать:

select 100*count(case when playSessionLength < 10 then 1 else null end)/count(*) 
from playData 
where timestamp > start and timestamp < end 

... но смотровая площадка для подсчета (*) = 0

+0

"случай, когда" Я понятия не имел, это было ключевое слово. Потрясающие! –

+0

Избегание деления на ноль может быть синтаксисом, специфичным для РСУБД. Например, в PostgreSQL вы должны использовать NullIf (count (*), 0) –

Смежные вопросы