2016-03-31 9 views
0

Ich bin ein Postgresql Anfänger. Ich habe einen Tisch "crashs" mitSELECT auf eine Unterabfrage

ID | Datum | Zeit

Mit ID als PK.

Ich habe eine Abfrage, die alle Crashs pro Tag zählt:

SELECT  TO_CHAR(crashs.date, 'DD/MM/YYYY') AS "date", COUNT(crashs."ID") AS "nbCrashs" 

FROM  crashs 

WHERE  crashs.date >= to_date('2016-03-28','YYYY-MM-DD') AND 
     crashs.date <= to_date('2016-03-31','YYYY-MM-DD') 

GROUP BY crashs.date 
ORDER BY crashs.date ASC; 

und das Ergebnis:

date  | nbCrashs 
---------------------------- 
29/03/2016 |  2 
30/03/2016 |  4 
31/03/2016 |  3 

Jetzt möchte ich die maximale nbCrashs dieser Abfrage wählen (so hier, 30/03/2016 -> 4)

ich versuchte eine SELECT auf diese als eine Unterabfrage, aber es funktioniert nicht ... Hier ist die Abfrage ich versuchte:

SELECT  MAX(CrashsPerDay.nbCrashs) 

FROM 

(SELECT  TO_CHAR(crashs.date, 'DD/MM/YYYY'), COUNT(crashs."ID") AS "nbCrashs" 

FROM  crashs 

WHERE  crashs.date >= to_date('2016-03-28','YYYY-MM-DD') AND 
      crashs.date <= to_date('2016-03-31','YYYY-MM-DD') 

GROUP BY crashs.date 
ORDER BY crashs.date ASC) AS "CrashsPerDay"; 

ich französisch bin so werde ich versuchen, die Fehlermeldung zu übersetzen, aber ich habe so etwas wie „fehlenden Eintrag der FROM-Klausel für die Tabelle‚crashsperday‘

Der Fehlerpunkt auf meiner SELECT, auf dem 'C' von "max ('C'rashsPerDay.nbCrashs)"

Jemand weiß, wie man meine Frage repariert?

Vielen Dank für Ihre Aufmerksamkeit

+0

Was passiert, wenn mehr als einen Tag das Maximum Nummer? –

+0

Ich frage mich, ob Sie Alias ​​benötigen: TO_CHAR (crashs.date, 'DD/MM/YYYY') –

+0

Die GROUP BY wird verwendet, um die Anzahl der Abstürze pro Tag zu zählen, wenn ich dies löschen, werde ich etwas wie haben: 29/03/2016 | 1 30/03/2016 | 1 30/03/2016 | 1 30/03/2016 | 1 31/03/2016 | 1 31/03/2016 | 1 Für den Alias ​​komme ich von SQL Server, also habe ich einige Schwierigkeiten, aber alle meine Alias ​​sind funktional mit Anführungszeichen.Aber Sie haben recht, ich kann "SELECT Max (nbCrashs), aber ich bekomme den folgenden Fehler:" NbCrashs nicht existiert " –

Antwort

1

Dies ist ein Fall Empfindlichkeitsproblem. Sobald Sie beginnen, Ihre Namen in "Quotes" zu verpacken, müssen Sie darauf achten, diesen Namen bei jedem Verweis immer in Anführungszeichen zu setzen. I.e. Die folgende Abfrage wird das Problem für Sie beheben:

SELECT  MAX("CrashsPerDay"."nbCrashs") -- Fix here 
FROM 
(SELECT  TO_CHAR(crashs.date, 'DD/MM/YYYY'), COUNT(crashs."ID") AS "nbCrashs" 
FROM  crashs 
WHERE  crashs.date >= to_date('2016-03-28','YYYY-MM-DD') AND 
      crashs.date <= to_date('2016-03-31','YYYY-MM-DD') 
GROUP BY crashs.date 
ORDER BY crashs.date ASC) AS "CrashsPerDay"; 

Oder vielleicht besser:

SELECT  MAX(CrashsPerDay.nbCrashs) 
FROM 
(SELECT  TO_CHAR(crashs.date, 'DD/MM/YYYY'), COUNT(crashs."ID") AS nbCrashs -- fix here 
FROM  crashs 
WHERE  crashs.date >= to_date('2016-03-28','YYYY-MM-DD') AND 
      crashs.date <= to_date('2016-03-31','YYYY-MM-DD') 
GROUP BY crashs.date 
ORDER BY crashs.date ASC) AS CrashsPerDay; -- and fix here 

Mit anderen Worten:

  • Diese beiden Namen gleich sind (Groß- und Kleinschreibung) : CrashsPerDay und crashsperday
  • Diese beiden Namen sind nicht gleich (Groß- und Kleinschreibung beachten): "CrashsPerDay" und "crashsperday"
  • In PostgreSQL, diese beiden Namen sind die gleichen (Kleinbuchstaben in der Standardeinstellung): crashsperday und "crashsperday"

OCD Bonus fix: It's "crashes", not "crashs" ;-)

+0

Vielen Dank! Es funktioniert! –

Verwandte Themen