2008-10-09 4 views
10

Ich habe ein Problem mit einer SQL-Abfrage auf Postgresql. Diese Klausel select ist ein Beispiel aus einem Vortrag über Datenbanken:SQL SELECT FROM ... AS mit Datentypspezifizierer?

1 select t.CourseNr, t.StudentsPerCourse, g.StudentCount, 
2  t.StudentsPerCourse/g.StudentCount as Marketshare 
3 from (select CourseNr, count(*) as StudentsPerCourse 
4  from taking 
5  group by CourseNr) t, 
6  (select count(*) as StudentCount 
7  from Students) g; 

Das Problem ist die Spalte Market in Zeile 2. Sowohl StudentsPerCourse und StudentCount vom Typ integer ist.

Wenn Sie dies in meiner Postgresql-Datenbank verwenden, wird die MarketsShare-Spalte als int-Typ ausgewertet, während ich hier ein float/numeric benötigen würde. Ich habe keine Möglichkeit gefunden, den Datentyp anzugeben, indem ich die Postgresql-Dokumentation zu SELECT-Klauseln durchsucht oder gegoogelt habe. Gibt es eine (vorzugsweise Standard SQL) Möglichkeit, den Spaltentyp anzugeben oder fehlt mir hier etwas?

Antwort

9

CAST() eine oder beide der Quellspalten als Dezimal/float/real/double/etc Typ.

+0

Ja, das hat geholfen :) Danke! – VolkA

+1

Alternative Casting-Syntax ist "SELECT mycolumn :: real FROM meinetable;" aber ich denke, die CAST() - Funktion ist portabler - Sie sollten wahrscheinlich dabei bleiben. – Neall

+0

Ich mag diese Kurzschrift: Ich wünschte, es wäre besser unter verschiedenen Anbietern unterstützt. –