2012-02-24 11 views
1

読んでいる著者と書籍の数を選択したいとき。私は上記の文で01を変更します与えられた作者のために未読の本の数を選択したい場合は、私は次の文SQLiteで未読書籍の最大パーセンテージで著者を選択

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

を使用します。

unread/allの割合でそれぞれを選択したいと考えており、これらの比率すべてからauthoridmax(unread/all)と選択します。

このような文を作成できますか?最大比率は1です。 authoridが最大の比率(例:比率= 1)であれば、それらのすべてを返すことができます。ランダムまたは1に制限します(これは問題ではありません)。

答えて

3

は、このようなものです:

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 
+0

最初のステートメントは素晴らしいです。私はこの条件付きカウントを知らなかった。しかし、2番目のステートメントは最大比率だけを選択することはありません。 – xralf

+0

この解決方法は正しいです。 2番目の 'select'ステートメントのIntead私は' order by ratio'を使用しました。 – xralf

+1

しかし、除算式で 'cast(count(authorid)as float)'を使う必要がありました。 – xralf

1

私はこのATMをテストしますが、これは割合と一緒にすべてのauthoridsをリストする必要があり、この

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

を試すことができません。すべての比率を得るために

+0

これは間違った比率を与えるだろう。質問を確認してください。 –

+0

@aF。私は、0/1フィールドのように見えます。 ) –

+0

彼はUNREAD比を望んでいます。あなたの 'SUM(read)'は、読者が本を読むとread = 1、それ以外の場合は0なので、READ比率になります。とった? –

関連する問題