2017-03-09 3 views
0

ich die folgenden Tabellen:SQL - Auswahl verschiedene Zählungen

User 
------------------- 
id BIGINT 
name text 

Session 
------------------- 
id BIGINT 
username text 
last_login datetime 

Und wollen die Gesamtanzahl der Benutzer zu bekommen, und die Anzahl der Benutzer, die eine Sitzung mit einem letzten Login von heute haben. Wie kann ich die Abfrage modellieren?

+4

Die Spalte user_id anstelle des Benutzernamens in der Sitzungstabelle haben. – jarlh

+1

Markieren Sie Ihre Frage mit der von Ihnen verwendeten Datenbank. –

+0

Ich habe diese Tabellen nicht entworfen, und ich kann sie nicht ändern – Desiderantes

Antwort

1

Lassen Sie mich annehmen, dass Sie die Sitzungstabelle beheben, um userId statt userName zu haben. Dann hängt Ihre Antwort von der Datenbank ab. Die allgemeine Idee ist so etwas wie diese:

select count(distinct u.id) as user_count, -- including those with no sessions 
     sum(case when cast(last_login as date) = CURRENT_DATE 
from users u left join 
    sessions s 
    on u.id = s.userId ; 

Dies ist die Skizze der Logik. Das Entfernen der Zeitkomponente aus einem Datums-/Uhrzeitwert variiert je nach Datenbank. Die Art der Darstellung des aktuellen Datums variiert je nach Datenbank.

+0

Es funktioniert! Vielen Dank! – Desiderantes