Wie verwenden von GROUP BY in firebird
Die Struktur der T_TABLE2 ist
ID INT
TBL1_ID INT
TESTER VARCHAR
LOT_ID VARCHAR
GRP VARCHAR
SITE_NUM INT
TEST_NUM VARCHAR
TEST_DESC VARCHAR
MEASUREMENT DOUBLE PRECISION
UNIT VARCHAR
LL DOUBLE PRECISION
UL DOUBLE PRECISION
STATUS VARCHAR
und ich verwende SQL editor-in firebird ist der test meiner Abfrage. Th-Abfrage
SELECT TEST_DESC, MEASUREMENT, LL, UL
FROM T_TABLE2
GROUP BY TEST_DESC
aber ich habe diesen Fehler in der Gruppe durch.
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
InformationsquelleAutor aiipee | 2013-10-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie kommen aus MySQL. MySQL - IMHO irreführend, falsch, und in einer schwarz-magicky, unpredictible Art und Weise - können Sie teilweise
GROUP BY
Abfragen und die Datenbank-engine versucht herauszufinden, aus dem rest der Abfrage die Wert der nicht-gruppiert-nach Spalten, die Sie wollen. Standard SQL (Firebird und die meisten anderen RDBMSes), auf der anderen Seite, nicht; es erfordert alle nicht-Aggregat-Spalten enthalten, in der group by -, und alle nicht-group-Spalten explizit angeben die Zeile, die Sie wollen.In Ihrem Fall, die problematischen Spalten
MEASUREMENT
,LL
, undUL
. Sie müssen angeben dieMEASUREMENT
,LL
, undUL
Sie wollen (ja, auch wenn Sie alle das gleiche; die Datenbank-engine hat keine Möglichkeit zu wissen, oder dies zu gewährleisten), oder wenn Sie wollen, um die Gruppe von einer oder mehreren Spalten oder möglicherweise Sie vergaß zu aggregieren (wolltest du dasSUM
?)Beispiele für gültige Anfragen:
Group by alle Spalten (entspricht einem
SELECT DISTINCT
):Gruppe von
MEASUREMENT
als gut und Rückgabe derMIN
LL undMAX
UL:SUM
nicht-gruppierte Spalten:Einer Kombination von Aggregaten:
InformationsquelleAutor lc.
Während einige Datenbanken, wie MySQL, sind milder, in standard-SQL verwenden wenn Sie
GROUP BY
, dieSELECT
- Liste muss enthalten nur die Spalten werden gruppiert und Aggregat-Funktionen (z.B.SUM()
,MAX()
). Wenn Sie angeben dürfen, die anderen Spalten, es ist nicht vorhersagbar, welche der Zeilen der Spalte gruppiert diese Spalten kommen aus -- Sie können sogar eine Mischung aus Spalten verschiedener Zeilen.Also müssen Sie etwas tun, wie:
InformationsquelleAutor Barmar
Müssen Sie einige Aggregat-Funktion (
COUNT()
,MIN()
,MAX()
,SUM()
,...) zu den einzelnen Spalten inSELECT
- Klausel, die nicht Teil derGROUP BY
.Beispielsweise Ihre Abfrage könnte so Aussehen
Anderen syntaktisch gültig, die Nutzung ist, um eine Liste von unterschiedlichen Werten
entspricht der
Wenn du mehr konkrete Frage, was genau Sie zu erreichen versuchen, mit dieser Abfrage wird dann die Antwort könnte behoben haben Sie Besondere Bedürfnisse.
InformationsquelleAutor peterm