Kiedy chcę wybrać autora i liczbę przeczytanych książek. Użyję następującego stwierdzenia

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

Gdy chcę wybrać liczbę nieprzeczytanych książek dla danego autora zmienię 1 na 0 w powyższym oświadczeniu.

Chciałbym wybrać dla każdego authorid stosunek unread/all i ze wszystkich tych stosunków wybrać authorid z max(unread/all).

Czy mogę stworzyć takie zestawienie? Maksymalny współczynnik to 1. Jeśli jest więcej authorids z maksymalnym ratio (np. ratio = 1), możesz zwrócić je wszystkie, losowo lub z ograniczeniem do 1 (nie ma to znaczenia).

1
xralf 24 luty 2012, 14:24

2 odpowiedzi

Najlepsza odpowiedź

Aby uzyskać wszystkie proporcje, wygląda to tak:

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

A to zapewni ci te z największym współczynnikiem:

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
3
aF. 24 luty 2012, 14:37

Nie mogę przetestować tego bankomatu, ale spróbuj tego

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

Powinno to zawierać listę wszystkich autorów wraz ze współczynnikiem.

1
Stephan B 24 luty 2012, 14:36