So beheben Sie den Fehler "Spalte ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist"

Der Fehler "Die Spalte in der Auswahlliste ist ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist"Unten erwähnt entsteht, wenn Sie ausführen"GRUPPIERE NACHAbfrage, und Sie haben mindestens eine Spalte in die Auswahlliste aufgenommen, die weder Teil der group by-Klausel ist noch in einer Aggregatfunktion wie enthalten ist max(), min(), sum(), count() und Durchschn. (). Damit die Abfrage funktioniert, müssen wir alle nicht aggregierten Spalten zu jeder Gruppe nach Klausel hinzufügen, wenn dies möglich ist und keine Auswirkungen auf die Ergebnisse hat, oder diese Spalten in eine geeignete Aggregatfunktion aufnehmen. Dies funktioniert wie ein Zauber. Der Fehler tritt in MS SQL auf, jedoch nicht in MySQL.

Zwei Schlüsselwörter “Gruppiere nach" und "Aggregatfunktion” wurden in diesem Fehler verwendet. Wir müssen also verstehen, wann und wie man sie verwendet.

Gruppieren nach Klausel:

Wenn ein Analyst die Daten wie Gewinn, Verlust, Umsatz, Kosten und Gehalt usw. mithilfe von SQL zusammenfassen oder aggregieren muss,GRUPPIERE NACHIst in dieser Hinsicht sehr hilfreich. Zusammenfassend lässt sich sagen, dass die täglichen Verkäufe der Geschäftsleitung angezeigt werden. Wenn Sie die Anzahl der Studenten in einer Abteilung einer Universitätsgruppe zusammen mit der Aggregatfunktion zählen möchten, können Sie dies ebenfalls erreichen.

Gruppieren nach Split-Apply-Combine-Strategie:

Gruppieren nach verwendet die Strategie „Split-Apply-Combine“

In der obigen Abbildung sehen wir, dass die Spalte basierend auf der ersten Spalte C1 in drei Gruppen aufgeteilt wurde und dann die Aggregatfunktion auf gruppierte Werte angewendet wird. Zuletzt weist die Kombinationsphase jeder Gruppe einen einzelnen Wert zu.

Dies kann anhand des folgenden Beispiels erklärt werden. Erstellen Sie zunächst eine Datenbank mit dem Namen "appuals".

Beispiel:

Erstellen Sie eine Tabelle “Mitarbeiter”Mit dem folgenden Code.

USE [appuals] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO TABELLE ERSTELLEN [dbo]. [Mitarbeiter] ([e_id] [int] NICHT NULL, [e_name] [varchar] (50) NULL, [dep_id] [int] NULL, [Gehalt] [int] NULL, CONSTRAINT [PK_employee] PRIMARY KEY CLUSTERED ([e_id] ASC) MIT (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_L) PRIMARY]) ON [PRIMARY] GO SET ANSI_PADDING OFF GO

Fügen Sie nun Daten mit dem folgenden Code in die Tabelle ein.

In Mitarbeiter (e_id, e_ename, dep_id, Gehalt) Werte (101, 'Sadia', 1.6000), (102, 'Saba', 1.5000), (103, 'Sana', 2.4000), ( 104, "Hammad", 2.3000), (105, "Umer", 3.4000), (106, "Kanwal", 3.2000)

Die Ausgabe wird so sein.

Wählen Sie nun Daten aus der Tabelle aus, indem Sie die folgende Anweisung ausführen.

Wählen Sie * vom Mitarbeiter

Die Ausgabe wird so sein.

Gruppieren Sie nun nach der Tabelle nach Abteilungs-ID.

Wählen Sie dep_id, Gehalt aus Mitarbeitergruppe nach dep_id

Fehler: Die Spalte "employee.sallary" ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist.

Der oben erwähnte Fehler tritt auf, weil die Abfrage "GROUP BY" ausgeführt wird und Sie die Spalte "employee.salary" in die Auswahlliste aufgenommen haben, die weder Teil der group by-Klausel noch in einer Aggregatfunktion enthalten ist.

Lösung:

Wie wir das wissen "gruppiere nach" Geben Sie eine einzelne Zeile zurück, daher müssen wir eine Aggregatfunktion auf Spalten anwenden, die nicht in der Klausel group by verwendet werden, um diesen Fehler zu vermeiden. Wenden Sie abschließend Group by und eine Aggregatfunktion an, um das Durchschnittsgehalt des Mitarbeiters in jeder Abteilung zu ermitteln, indem Sie den folgenden Code ausführen.

Wählen Sie dep_id, avg (Gehalt) als durchschnittliches Gehalt aus der Mitarbeitergruppe von dep_id aus

Wenn wir diese Tabelle gemäß der split_apply_combine-Struktur darstellen, sieht sie außerdem so aus.

Die obige Abbildung zeigt, dass die Tabelle zunächst gemäß der Abteilungs-ID in drei Gruppen eingeteilt wird. Anschließend wird die aggregierte Funktion avg () angewendet, um den aggregierten Mittelwert des Gehalts zu ermitteln, der dann mit der Abteilungs-ID kombiniert wird. Daher wird die Tabelle nach Abteilungs-ID gruppiert und das Gehalt abteilungsweise aggregiert.

Aggregatfunktionen:

Die logische Beschreibung der Verwendung von Gruppen- und Aggregatfunktionen zusammen:

Jetzt werden wir die Verwendung von "Gruppieren nach" und "Aggregatfunktionen" anhand eines Beispiels logisch verstehen.

Erstellen Sie eine Tabelle mit dem Namen „Menschen”In der Datenbank unter Verwendung des folgenden Codes.

USE [appuals] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo]. [People] ([id] [bigint] IDENTITY (1,1) NICHT NULL, [name] [varchar] (500) NULL, [ Stadt] [varchar] (500) NULL, [Bundesland] [varchar] (500) NULL, [Alter] [int] NULL) ON [PRIMARY] GO

Fügen Sie nun mit der folgenden Abfrage Daten in die Tabelle ein.

In Personen (Name, Stadt, Bundesland, Alter) Werte einfügen ('Meggs', 'MONTEREY', 'CA', 20), ('Staton', 'HAYWARD', 'CA', 22), ('Eisen', "IRVINE", "CA", 25) ("Krank", "PLEASANT", "IA", 23), "Davidson", "WEST BURLINGTON", "IA", 40), ("Pepewachtel", "FAIRFIELD" ',' IA ', 35) (' Schmid ',' HILLSBORO ',' OR ', 23), (' Davidson ',' CLACKAMAS ',' OR ', 40), (' Condy ',' GRESHAM ',' ODER ', 35)

Die Ausgabe lautet wie folgt:

Wenn der Analyst keine Einwohner und deren Alter in den verschiedenen Bundesstaaten kennen muss. Die folgende Abfrage hilft ihm dabei, die erforderlichen Ergebnisse zu erzielen.

Wählen Sie das Alter aus und zählen Sie (*) als Anzahl der Einwohner aus der Personengruppe nach Bundesland

Error: Die Spalte "people.age" ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist.

Bei der Ausführung der oben genannten Abfrage ist der folgende Fehler aufgetreten

"Nachricht 8120, Ebene 16, Status 1, Zeile 16 Die Spalte" people.age "ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist."

Dieser Fehler tritt auf, weil die "GRUPPIERE NACH" Abfrage wird ausgeführt und Sie haben aufgenommen "'Menschen. Alter" Spalte in der Auswahlliste, die weder Teil der group by-Klausel ist noch in einer Aggregatfunktion enthalten ist.

Bei der Gruppierung nach Status tritt ein Fehler auf

Logische Beschreibung und Lösung:

Dies ist kein Syntaxfehler, aber ein logischer Fehler. Da wir sehen können, dass die Spalte "no_of_residents" nur eine einzelne Zeile zurückgibt, wie können wir nun das Alter aller Einwohner in einer einzelnen Spalte zurückgeben? Wir können eine Liste des Alters von Personen haben, die durch Kommas getrennt sind, oder das Durchschnittsalter, das Mindest- oder Höchstalter. Daher benötigen wir weitere Informationen zur Spalte „Alter“. Wir müssen quantifizieren, was wir mit der Altersspalte meinen. Nach Alter, was wir zurückgeben wollen. Jetzt können wir unsere Frage mit genaueren Informationen über die Altersspalte wie diese ändern.

Finden Sie keine Einwohner zusammen mit dem Durchschnittsalter der Einwohner in jedem Bundesstaat. In Anbetracht dessen müssen wir unsere Abfrage wie unten gezeigt ändern.

Wählen Sie Bundesstaat, Durchschnitt (Alter) als Alter, Anzahl (*) als Anzahl der Einwohner aus Personengruppen nach Bundesstaat

Dies wird fehlerfrei ausgeführt und die Ausgabe wird so sein.

Daher ist es auch wichtig, logisch darüber nachzudenken, was in der select-Anweisung zurückgegeben werden soll.

Darüber hinaus sollten die folgenden Punkte berücksichtigt werden Verwenden Sie die Option "Gruppieren nach", um Fehler zu vermeiden.

Gruppieren nach und NULL-Werte:

Fügen Sie zunächst eine weitere Zeile mit dem Namen "Personen" in die Tabelle ein, wobei die Spalte "Status" leer / null ist.

in Personen (Name, Stadt, Bundesland, Alter) Werte einfügen ('Kanwal', 'GRESHAM', '', 35)

Führen Sie nun die folgende Anweisung aus.

Wählen Sie Bundesstaat, Durchschnitt (Alter) als Alter, Anzahl (*) als Anzahl der Einwohner aus Personengruppen nach Bundesstaat

Die folgende Abbildung zeigt die Ausgabe. Sie können sehen, dass ein leerer Wert in der Statusspalte als separate Gruppe betrachtet wird.

Erhöhen Sie jetzt keine Nullzeilen, indem Sie weitere Zeilen mit dem Status Null in die Tabelle einfügen.

in Personen (Name, Stadt, Bundesland, Alter) Werte einfügen ('Kanwal', 'IRVINE', 'NULL', 35), ('Krank', 'PLEASANT', 'NULL', 23)

Führen Sie nun erneut dieselbe Abfrage aus, um die Ausgabe auszuwählen. Die Ergebnismenge sieht folgendermaßen aus.

Wir können in dieser Abbildung sehen, dass eine leere Spalte als separate Gruppe betrachtet wird und die Nullspalte mit 2 Zeilen als eine weitere separate Gruppe mit zwei Einwohnern betrachtet wird. So funktioniert „Gruppieren nach“.

Facebook Twitter Google Plus Pinterest