Выберите автора с максимальным процентом непрочитанных книг в SQLite - PullRequest
1 голос
/ 24 февраля 2012

Когда я хочу выбрать автора и количество книг, которые читаются. Я буду использовать следующее утверждение

select authorid, count(authorid)
from books
where read = 1
group by authorid

Когда я хочу выбрать количество непрочитанных книг для данного автора, я изменю 1 на 0 в приведенном выше утверждении.

Я бы хотел выбрать для каждого authorid соотношение unread/all и из всех этих соотношений выберите authorid с max(unread/all).

Могу ли я создать такое заявление? Максимальное соотношение составляет 1. Если есть больше authorid с максимальным отношением (например, отношение = 1), вы можете вернуть их все, случайные из них или ограничить до 1 (это не имеет значения).

Ответы [ 2 ]

3 голосов
/ 24 февраля 2012

Чтобы получить все соотношения, нужно:

select authorid,
       SUM(case when read = 0 then 1 else 0 end)/count(authorid) as ratio
from books b
group by authorid

И вы получите те, у которых самый большой коэффициент:

select b.authorid, max(aux.ratio) as maxRatio
from books b
inner join(
    select authorid,
           SUM(case when read = 0 then 1 else 0 end)/count(authorid) as ratio
    from books b
    group by authorid) aux on b.authorid = aux.authorid
group by b.authorid
1 голос
/ 24 февраля 2012

Я не могу проверить этот банкомат, но попробуйте это

SELECT authorid, SUM(read) / COUNT(*)
FROM books
GROUP BY authorid
ORDER BY SUM(read) / COUNT(*) DESC

Это должно перечислить все авторы вместе с соотношением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...