2016-05-30 15 views
0

Auf unserer Postgresql-Datenbank haben wir derzeit 2 Tabellen namens Benutzer und Buchungen.Wie kombinieren Sie eine Zählung in einer bestimmten Select-Anweisung?

Wir versuchen derzeit herauszufinden, wie viele Buchungen sie im Laufe der Zeit gemacht haben. Hier

ist die Abfrage, die wir im Moment haben:

SELECT "domain".users.email, COUNT("domain".bookings."id") 
FROM "domain".bookings 
INNER JOIN "domain".users ON "domain".users."id" = "domain".bookings.user_id 
GROUP BY "domain".users.email 

Wenn wir das Datum haben die Buchung erstellt wurde (Feld „domain.bookings.created_at) mit Filter gestern haben wir nur die Daten von gestern erhalten.

gibt es eine Möglichkeit, um zu sehen, die gestern gekauft, wie viele Buchungen sie Überstunden gemacht haben?

Thank you! Luca

+0

Fügen Sie der Auswahlliste 'count (Fall bei Buchungsdatum = gestern dann 1 Ende)' (Pseudo-SQL) hinzu. – jarlh

+0

Bitte fügen Sie einige Beispieldaten und die erwartete Ausgabe hinzu. Ich verstehe nicht wirklich, welche Ausgabe Sie erwarten –

Antwort

0

VERSUCHEN SIE DIESE

SELECT "domain".users.email, COUNT(CASE WHEN bookingdate = current_date - 1 THEN 1 END) AS TOTAL_BOOKING 
FROM "domain".bookings 
INNER JOIN "domain".users ON "domain".users."id" = "domain".bookings.user_id 
GROUP BY "domain".users.email 
0

Vielen Dank für die Beantwortung. Ich war wahrscheinlich nicht präzise genug!

Grundsätzlich, wenn ich die folgende Abfrage verwenden:

SELECT 
"domain".users.email, 
COUNT("domain".bookings."id") AS "Total Bookings" 
FROM 
"domain".bookings 
INNER JOIN "domain".users ON "domain".users."id" = "domain".bookings.user_id  
GROUP BY 
"domain".users.email 

ich die Anzahl der von einem Benutzer getätigte Buchungen.

ABER

Ich möchte folgendes erhalten: die von den Benutzern alle Zeit die Anzahl der Buchungen, die gestern gekauft.

Ich habe versucht, diese

SELECT 
"domain".users.email, 
COUNT("domain".bookings."id") AS "Total Bookings" 
FROM 
"domain".bookings 
INNER JOIN "domain".users ON "domain".users."id" = "domain".bookings.user_id  
WHERE 
"domain".bookings.created_at = 'yesterday' 
GROUP BY 
"domain".users.email 

Aber ich bin keine Antworten bekommen ...

Danke für die Hilfe!

Luca

+0

Fügen Sie keine zusätzlichen Informationen als Antwort [Bearbeiten] (http://stackoverflow.com/posts/37522512/edit) Ihre Frage statt. –

+0

Ok sorry ... Ganz neu mit all dem! –

0

Dies ist, was Sie suchen:

SELECT u.id, u.email, count(b.id) AS "Total Bookings" 
FROM "domain".bookings as b 
    JOIN "domain".users as U ON u.id = b.user_id 
WHERE EXISTS (SELECT 1 
       FROM "domain".bookings b2 
       WHERE b2.created_at = current_date - 1 
       AND b2.user_id = b.user_id) 
GROUP BY u.email; 

Die existiert Bedingung nur Zeilen aus der bookings Tabelle für Benutzer zurück, die etwas gestern gebucht.


Unrelated, aber: ein Schlüsselwort wie domain verwenden, die doppelte Anführungszeichen für Bezeichner erfordert, ist nicht so eine gute Idee. Wenn Sie einen anderen Namen gefunden haben, ersparen Sie sich auf lange Sicht einige Probleme.

+0

Danke! Ich habe getestet, aber ich bekomme immer noch die Nummern für alle Benutzer, es sieht so aus als ob der Filter nicht funktioniert ... Abfrage ist: "domain" .users SELECT "id", "domain" .users.email, count ("domain" .bookings "id".) AS "Total Buchungen" FROM „Domain. “.bookings JOIN "domain" .users ON "domain" .users. "ID"= "Domain" .bookings.user_id WHERE EXISTIERT (SELECT 1 \t \t \t \t \t \t \t FROM "Domain" .bookings WHERE "domain" .bookings.created_at

Verwandte Themen