[Oracle 10g] Group by Problem, not a GROUP BY expression

Gray

Erfahrenes Mitglied
Hi, hab folgendes Problem, ich habe eine Liste mit Servern und Ports, nun soll in der Übersicht nur jeder Server einmal angezeigt werden, aber bei meinem Group By versuch der unter MySQL funktioniert, hab ich unter Oracle Probleme.

Hier erstmal der Code:
PHP:
46: $result = ociparse($db, "SELECT * FROM SERVER GROUP BY IP");
47: ociexecute($result);

Nun kommt aber die Fehlermeldung:

Code:
Warning: ociexecute() [function.ociexecute]: ORA-00979: not a GROUP BY expression in /home/www/web1/html/verwaltung/server/ausfaelle.php on line 47
 
Was liefert dir Mysql in dem Fall?

Wie behandelt es die Spalten, nach denen nicht gruppiert wird?

Normalerweise müssen alle Spalten nach denen nicht gruppiert wird mit einer Agregatfunktion wie z.B. SUM(), COUNT(), ... zusammengefasst werden. Mysql verzeiht hier Fehler und unsauberes Arbeiten.
 
Kenn das Problem. Du musst alles was du im SELECT Teil hast auch im Group By Teil aufführen. Blöd is aber so :)
 
Zuletzt bearbeitet:
Kenn das Problem. Du musst alles was du im SELECT Teil hast auch im Group By Teil aufführen. Blöd is aber so :)

Hallo , dann müsste
Code:
"SELECT * FROM SERVER GROUP BY *"
ja funktioniern, umgekehrt wird es das Problem eher treffen ;)
Code:
"SELECT count(*) FROM SERVER GROUP BY IP"
liefert zwar ein Ergebnis, mit dem man aber wohl nichts anfangen kann.

GROUP BY erwartet im Select-Teil eine Gruppierungsfunktion und die Spalten aus dem Group-By-Teil bzw.
... alles was du im Group By Teil hast auch im SELECT Teil aufführen. ...

Ein Select mit Wildcard wie * hat bei einem GROUP BY auch wenig Sinn, deshalb besser ungefähr so:
Code:
"SELECT IP, count(*) FROM SERVER GROUP BY IP"

mfg
 
:) Hab mich wohl nicht richtig ausgedrückt sorry,

Ich mein Wenn du z.B.

SELECT id,datum,abteilung

hast

muss im GROUP BY teil das stehen:

GROUP BY id,datum,abteilung

GROUP BY * funktioniert da nicht auch wenn du im SELECT teil * drin hast musst du jedes einzelne Feld im GROUP BY teil beim Namen nennen.

Also in deinem Fall musst du das hier machen:

Code:
SELECT * FROM table GROUP BY spalte1,spalte2,spalte3......spalte30

ich hoff man kann meinen Gedankengang irgendwie nachvollziehen

Edit:
"SELECT IP, count(*) FROM SERVER GROUP BY IP" funktioniert nicht. Musst dem Count schon n Namen geben. Also count(*) AS bla. aber count(*) hab ich auch noch nie gesehn :)
 
Zuletzt bearbeitet:
Zu dem im Edit:
Code:
select ip, count(*) from server group by ip
Der Query funktioniert sehr wohl. Er liefert auch ne gute Aussage:
Die Anzahl der Einträge pro IP. Ob die Spalte count(*) jetzt benannt ist, oder nicht, ist nur ne Schöhnheitsfrage.

Zu den Queries:
Code:
SELECT * FROM table GROUP BY spalte1,spalte2,spalte3......spalte30
und
Code:
SELECT id,datum,abteilung FROM table Group by id,datum,abteilung
Ich seh da keinen Sinn. Es muss bei einem Query mit Group By auch immer im Select Teil ne Spalte angegeben sein, in der bestimmte Zeilen gruppiert werden.
Siehe auch http://www.w3schools.com/sql/sql_functions.asp bei den "Aggregate Functions".

Beispiel: Wenn in der Tabelle "tabelle" Aufträge abgespeichert sind, die an einem bestimmten Datum von einer bestimmten Abteilung abgeschlossen wurden, dann bekommt man mit folgenden Query eine Auflistung wieviele Aufträge jede Abteilung, an jedem Tag abgeschlossen hat.
SQL:
SELECT datum, abteilung, count(*)
FROM tabelle
GROUP BY datum,abteilung
Wie man das jetzt mit sortiert, "ORDER BY datum,abteilung" oder "ORDER BY abteilung,datum" wird dabei noch nicht gesagt.
Wenn man bei dem Query die Spalte id wieder hinzufügt wird, dann wird in count(*) immer ne 1 stehen, da nur die Felder gezählt werden, bei denen die mit GROUP BY angegebenen Spalten gleich sind.
 
Zuletzt bearbeitet:
Ja kann sein aber bitte führ doch mal diese Querys in ner Oracle DB aus:

1.
SELECT COUNT(spalte1) AS ANZAHL, datum, id, spalte1 FROM table WHERE id > 20 GROUP BY datum

2.
SELECT COUNT(spalte1) AS ANZAHL, datum, id, spalte1 FROM table WHERE id > 20 GROUP BY datum, id, spalte1

Wirst sehen beim 1. Query bekommst du die Fehlermeldung "Group by Problem, not a GROUP BY expression"
Beim 2. nicht.

Wohlgemerkt in ner Oracle Datenbank Denn in einer MYSQL DB funktioniert auch der 1.
 
Das ist mir schon bewusst. Das Verhalten von Mysql bei diesem Thema find ich nicht gerade berauschend.
Nur liefert der zweite keine verwertbare Aussage, da in Anzahl immer 1 steht.
Ich gehe mal davon aus, dass "id" der Primary Key ist. Wenn nicht, dann nehm ich das mit der nicht verwertbaren Aussage natürlich zurück.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück