2017-06-13 2 views
0

sagen, dass ich eine Abfrage wie folgt aus:Warum muss ich nach Spalten gruppieren, nach denen ich nicht gruppieren muss?

   SELECT 
        car.id, 
        car.make, 
        car.model, 
        car.vin, 
        car.year, 
        car.color 
       FROM car GROUP BY car.make 

ich zu einer Gruppe von Make das Ergebnis wollen, so kann ich jede doppelte macht beseitigen. Ich versuche im Wesentlichen, eine SELECT DISTINCT zu tun. Aber ich bekomme diese Fehlermeldung:

ERROR column must appear in the GROUP BY clause or be used in an aggregate function 

Es albern scheint durch jede Spalte zu gruppieren, wenn ich möchte nicht in einer Gruppe einen von ihnen zu sehen. Wie komme ich hier zurecht?

+0

Wenn für jedes 'make' mehrere Zeilen vorhanden sind, welche Werte von' model' oder 'vin' sollte die Datenbank wählen? Postgres gibt Ihnen nicht nur einige zufällige Ergebnisse zurück. –

Antwort

0

Statt GROUP BY verwenden DISTINCT ON:

SELECT DISTINCT ON (c.make) c.* 
FROM car c 
ORDER BY c.make; 

Dies wird eine beliebige Zeile für jeden machen zurückzukehren. Welche Reihe? Ein beliebiger. Sie können einen zweiten Schlüssel in die ORDER BY einschließen, um die bestimmte Zeile zu bestimmen, die Sie möchten (billigste, älteste usw.).

0

Alle Spaltennamen in der SELECT-Liste müssen in der GROUP BY-Klausel vorkommen, es sei denn, name wird nur in einer Aggregatfunktion verwendet. Mit PostgreSQL können Sie nur Spalten aus der GROUP BY-Klausel auslassen, die funktional von Spalten in GROUP BY abhängen.