2017-07-25 2 views
0

私はあなたが私の問題のシンプルで速い解決策を持っていることは確かですが、私のSQLスキルは限られています。SQLite:別のテーブルに2つの異なるカウント

それでは、私が持っていることのようなものです:

ニュースグループ:[名(PK)]

記事:[ID(PK)] [newsgroupName(FK)] [日付:日付] [読み取り:ブール値]

私が知りたいのは、各ニュースグループの名前と、未読記事の数、すべての記事の数、最新の日付の数を表示するクエリです。 これも可能ですか1つのSelect-Queryで達成できますか?

ありがとうございます!

答えて

2

あなたは、単に適切な集計関数を使用することができます。

SELECT newsgroupName, 
     SUM(NOT read) AS countUnread, 
     COUNT(*)  AS countAll, 
     MAX(date)  AS mostRecentDate 
FROM Article 
GROUP BY newsgroupName; 
+0

良い、私は何かを学んだ:) –

+0

これは私が求めたものです!私が見なければならないのは、roomデータベースとliveオブジェクトのアンドロイドアプリケーションでこれを実装すると、パフォーマンスヒットだけです。とにかくありがとう! – HugoCodes

0

私はこのような何かを推測:

SELECT name, COUNT(countUnread) AS countUnread, COUNT(countRead) AS countRead, MAX(mostRecentDateUnread) AS mostRecentDateUnread, MAX(mostRecentDateRead) AS mostRecentDateRead FROM (
    SELECT newsgroupName AS name, COUNT(newsgroupName) AS countUnread, 0 AS countRead, MAX(date) AS mostRecentDateUnread, NULL AS mostRecentDateRead 
    FROM Article 
    WHERE read = 0 
    GROUP BY newsgroupName, read 

    UNION ALL 

    SELECT newsgroupName AS name, 0 AS countUnread, COUNT(newsgroupName) AS countRead, NULL AS mostRecentDateUnread, MAX(date) AS mostRecentDateRead 
    FROM Article 
    WHERE read = 1 
    GROUP BY newsgroupName, read 
) 
GROUP BY name 

を私は試していないが、いくつかの修正と、理論的にはそれが仕事ができます。

+0

これは、すべての記事の数とすべての未読のものが含まれていますか? – HugoCodes

+0

@HugoCodes申し訳ありませんが、私はその部分を逃しました。今見てみましょう。 –

+0

ありがとう!私は家に帰るとすぐにそれが動作するかどうかを確認します。私は未読/読んだ記事の日を必要としません..最後の;)しかし、私は自分自身でそれを理解することができると思う。インナーセレクトに関するパフォーマンス上の問題がありますか? – HugoCodes

関連する問題