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 unten erwähnte Fehler “Spalte ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist” tritt auf, wenn Sie die Abfrage “GROUP BY” ausführen und mindestens eine Spalte in die Auswahlliste aufgenommen haben Dies ist weder Teil der group by-Klausel noch in einer Aggregatfunktion wie max (), min (), sum (), count () und avg () enthalten. 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.

Fehler “Spalte ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist.”

Bei diesem Fehler wurden zwei Schlüsselwörter “Gruppieren nach” und “Aggregatfunktion” verwendet. Wir müssen also verstehen, wann und wie man sie benutzt.

Gruppieren nach Klausel:

Wenn ein Analyst Daten wie Gewinn, Verlust, Umsatz, Kosten und Gehalt usw. mithilfe von SQL zusammenfassen oder aggregieren muss, ist „GROUP BY“ 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“

  • Die Split-Phase teilt die Gruppen mit ihren Werten.
  • Die Apply-Phase wendet die Aggregatfunktion an und generiert einen einzelnen Wert.
  • Die kombinierte Phase kombiniert alle Werte in der Gruppe als einen einzigen Wert.

Beispiel für 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”.

Datenbankerstellung

Beispiel:

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

VERWENDEN [appuals]
GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[employee](
[e_id] [int] NICHT NULL,
[e_ename] varchar NULL,
[dep_id] [int] NULL,
[salary] [int] NULL, EINSCHRÄNKUNG [PK_employee] PRIMARY KEY CLUSTERED (
[e_id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) AUF [PRIMARY]
GO SET ANSI_PADDING OFF GOErstellung von Mitarbeitertabellen

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.

Dateneinfügung in Tabelle “Mitarbeiter”

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.

Die Ausgabe aus der Mitarbeitertabelle.

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.

Fehler “Spalte ’employee.salary’ ist in der Auswahlliste ungültig, da sie nicht in enthalten ist
entweder eine Aggregatfunktion oder die GROUP BY-Klausel. “

Lösung:

Da wir wissen, dass “group by” eine einzelne Zeile zurückgibt, müssen wir eine Aggregatfunktion auf Spalten anwenden, die in der group by-Klausel nicht 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 ausFinden Sie das Durchschnittsgehalt des Mitarbeiters in jeder Abteilung

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

Die Strategie „SPLIT-APPLY-COMBINE“ wurde auf die Mitarbeitertabelle angewendet, um das abteilungsbezogene Durchschnittsgehalt zu ermitteln

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:

  • Summe (): Gibt die Summe jeder Gruppe oder Summe zurück
  • Count (): Gibt die Anzahl der Zeilen in jeder Gruppe zurück.
  • Avg (): Gibt den Mittelwert oder Durchschnitt jeder Gruppe zurück
  • Min (): Gibt den Mindestwert jeder Gruppe zurück
  • Max (): Gibt den Maximalwert jeder Gruppe zurück.

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 mit dem folgenden Code eine Tabelle mit dem Namen “Personen” in der Datenbank.

VERWENDEN [appuals]
GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[people](
[id] [bigint] IDENTITÄT (1,1) NICHT NULL,
[name] varchar NULL,
[city] varchar NULL,
[state] varchar NULL,
[age] [int] NULL) EIN [PRIMARY]
GEHENTabellenerstellung

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:

Einfügen von Daten in eine Tabelle mit dem Namen “Personen”

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.

Alter auswählen, zählen

als Anzahl der Einwohner von Personengruppen nach Bundesstaaten

Fehler: 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 Abfrage “GROUP BY” ausgeführt wird und Sie “‘people” eingeschlossen haben. age ”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.

Staat auswählen, Durchschnitt (Alter) als Alter, Anzahl

als Anzahl der Einwohner von Personengruppen nach Bundesstaaten

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

Abfrage, um keine Einwohner zusammen mit dem Durchschnittsalter der Einwohner in jedem Bundesstaat zu finden.

  • 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 bei der Verwendung von “Gruppieren nach” berücksichtigt werden, um Fehler zu vermeiden.
  • Die GROUP BY-Klausel steht nach der where-Klausel und vor der order by-Klausel.

Wir können die where-Klausel verwenden, um Zeilen zu entfernen, bevor wir die “group by” -Klausel anwenden.

Wenn eine Gruppierungsspalte eine Nullzeile enthält, wird diese Zeile als Gruppe für sich angezeigt. Wenn eine Spalte mehr als eine Null enthält, werden sie außerdem in eine einzelne Nullgruppe eingefügt, wie im folgenden Beispiel gezeigt.

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)

Hinzufügen von NULL / Leerwert zu der Spalte, auf die die Klausel group by angewendet werden muss

Führen Sie nun die folgende Anweisung aus.

Staat auswählen, Durchschnitt (Alter) als Alter, Anzahl

als Anzahl der Einwohner von Personengruppen nach Bundesstaaten

Die folgende Abbildung zeigt die Ausgabe. Sie können sehen, dass ein leerer Wert in der Statusspalte als separate Gruppe betrachtet wird.Der leere Wert in der Spalte, auf die die Gruppe angewendet wurde, wird als einzelne Gruppe betrachtet

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)

Einfügen eines NULL-Werts in die Spalte, auf die “Gruppieren nach” angewendet wurde.

Führen Sie nun erneut dieselbe Abfrage aus, um die Ausgabe auszuwählen. Die Ergebnismenge wird so aussehen.

Der Wert „Null“ in der Spalte, auf die die Gruppe angewendet wurde, wird als einzelne Gruppe betrachtet

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 Bewohnern betrachtet wird. So funktioniert „Gruppieren nach“.


0 Comments

Leave a Reply