2017-07-25 6 views
0

Ich bin mir ziemlich sicher, dass Sie eine einfache und schnelle Lösung für mein Problem haben, aber meine SQL-Fähigkeiten sind begrenzt und ich kann es nicht von mir selbst herausfinden.SQLite: Zwei verschiedene Counts auf verschiedenen Tabelle

Also, was ich habe, ist so etwas wie:

Newsgroup: [Name (PK)]

Artikel: [Id (PK)] [newsgroupName (FK)] [Datum: Datum] [lesen: Boolean]

Was ich wissen will, ist eine Abfrage, die mir den Namen jeder Newsgroup zusammen mit der Anzahl der ungelesenen Artikel, Anzahl aller Artikel und das Datum der neuesten ... Ist dies sogar möglich Archieve in einer einzigen Select-Query?

Vielen Dank im Voraus!

Antwort

2

Sie können einfach die entsprechenden Aggregationsfunktionen verwenden:

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

Gut, ich habe etwas gelernt :) –

+0

Das ist genau das, wonach ich gefragt habe! Das einzige, was ich mir ansehen muss, ist der Performance-Hit, wenn ich dies in einer Android-Anwendung mit Raumdatenbank und Liveobjekten implementiere. Danke trotzdem! – HugoCodes

0

Ich denke, so etwas wie dieses:

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 

ich nicht versucht haben, aber in der Theorie mit einigen beheben es funktionieren könnte.

+0

Ist dies die Anzahl aller Artikel umfassen und alle ungelesenen diejenigen? – HugoCodes

+0

@HugoCodes Entschuldigung, ich habe diesen Teil verpasst. Schau es dir jetzt an. –

+0

Danke! Ich werde prüfen, ob das funktioniert, sobald ich wieder zu Hause bin. Ich brauche nicht das Datum der ungelesenen/gelesenen Artikel tho .. nur das letzte;) Aber ich denke ich kann das selbst herausfinden. Gibt es potenzielle Leistungsprobleme bezüglich der inneren Auswahl? – HugoCodes

Verwandte Themen