Oracle SQL Problem mit Group By

mafin

Mitglied
Hallo,

ich habe folgendes Problem.
Meine SQL Anweisung kann mit dem Group Befehl nicht umgehen.
Code:
select gezlizenzen.produkt as produkt, gezlizenzen.benutzer as benutzerid, benutzer.benutzer as benutzer, (TO_NUMBER(TO_CHAR(gezlizenzen.endzeit, 'SSSSS'))-TO_NUMBER(TO_CHAR(gezlizenzen.startzeit, 'SSSSS'))) as zeitdifferenz from gezLizenzen, benutzer where gezlizenzen.benutzer = benutzer.benutzerid group by produkt
Ohne diesen Befehl funktioniert der SQL String. Also gehe ich davon aus, dass ich mit group by irgendwas falsch mache.

Kann mir jemand helfen? Wäre sehr freundlich.

Folgender Fehler erscheint:

ORA-00979: Kein GROUP BY Ausdruck.
Error at Line 1: Column 39.
Also direkt nach diesem Komma:
select gezlizenzen.produkt as produkt,
 
Hallo,

ich habe folgendes Problem.
Meine SQL Anweisung kann mit dem Group Befehl nicht umgehen.
Code:
select gezlizenzen.produkt as produkt, gezlizenzen.benutzer as benutzerid, benutzer.benutzer as benutzer, (TO_NUMBER(TO_CHAR(gezlizenzen.endzeit, 'SSSSS'))-TO_NUMBER(TO_CHAR(gezlizenzen.startzeit, 'SSSSS'))) as zeitdifferenz from gezLizenzen, benutzer where gezlizenzen.benutzer = benutzer.benutzerid group by produkt
Ohne diesen Befehl funktioniert der SQL String. Also gehe ich davon aus, dass ich mit group by irgendwas falsch mache.

Kann mir jemand helfen? Wäre sehr freundlich.

Folgender Fehler erscheint:

ORA-00979: Kein GROUP BY Ausdruck.
Error at Line 1: Column 39.
Also direkt nach diesem Komma:
select gezlizenzen.produkt as produkt,

Hi,

Es müssen alle Attribute des SELECT Teils im Group by enthalten sein


Gruss
 
Wenn ich hinten alle Attribute dranhänge, dann sagt er mir dass Zeitdifferenz ein ungültiger Bezeichner ist. Wenn ich das weglasse, dann schimpft er, dass Benutzer nicht eindeutig definiert ist.

Ich komme an dieser Stelle einfach nicht mehr weiter.
 
Wenn ich hinten alle Attribute dranhänge, dann sagt er mir dass Zeitdifferenz ein ungültiger Bezeichner ist. Wenn ich das weglasse, dann schimpft er, dass Benutzer nicht eindeutig definiert ist.

Ich komme an dieser Stelle einfach nicht mehr weiter.

- Du kanst nicht nach einem Alias gruppieren. mache einen SELECT um das ganze und Gruppiere im äusseren Select

Gruss
 
- Du kanst nicht nach einem Alias gruppieren. mache einen SELECT um das ganze und Gruppiere im äusseren Select

Gruss

Das verstehe ich nicht so ganz.
Kannst du das mal an meinen SQL Befehl anwenden und hier posten?
Ich habe da ein paar Möglichkeiten probiert aber immer nur Fehler.

Oracle SQL ist echt mal anders. Meine Befehle haben so schön im MySQL funktioniert. Jetzt aber leider die Umstellung auf Oracle.
Eigentlich sehr interessant, nur warten an jeder Ecke Hindernisse.
 
Das verstehe ich nicht so ganz.
Kannst du das mal an meinen SQL Befehl anwenden und hier posten?
Ich habe da ein paar Möglichkeiten probiert aber immer nur Fehler.

Oracle SQL ist echt mal anders. Meine Befehle haben so schön im MySQL funktioniert. Jetzt aber leider die Umstellung auf Oracle.
Eigentlich sehr interessant, nur warten an jeder Ecke Hindernisse.

Hallo,

(Ungetestst)

Code:
SELECT produkt,benutzerid,benutzer,zeitdifferenz FROM (
  SELECT   gezlizenzen.produkt AS produkt, gezlizenzen.benutzer AS benutzerid,
			  benutzer.benutzer AS benutzer,
			  (TO_NUMBER (TO_CHAR (gezlizenzen.endzeit, 'SSSSS'))
				- TO_NUMBER (TO_CHAR (gezlizenzen.startzeit, 'SSSSS')))
				  AS zeitdifferenz
	 FROM   gezLizenzen, benutzer
	WHERE   gezlizenzen.benutzer = benutzer.benutzerid)
GROUP BY produkt,benutzerid,benutzer,zeitdifferenz


Gruss
 
Zuletzt bearbeitet:
Hallo,

(Ungetestst)

Code:
SELECT produkt,benutzerid,benutzer,zeitdifferenz FROM (
  SELECT   gezlizenzen.produkt AS produkt, gezlizenzen.benutzer AS benutzerid,
			  benutzer.benutzer AS benutzer,
			  (TO_NUMBER (TO_CHAR (gezlizenzen.endzeit, 'SSSSS'))
				- TO_NUMBER (TO_CHAR (gezlizenzen.startzeit, 'SSSSS')))
				  AS zeitdifferenz
	 FROM   gezLizenzen, benutzer
	WHERE   gezlizenzen.benutzer = benutzer.benutzerid)
GROUP BY produkt,benutzerid,benutzer,zeitdifferenz

Klappt auf Anhieb! Danke,
aber was kann ich nun genau vom Group By erwarten?
Er gruppiert ja alle gleichen Produkte, danach die benutzer nach deren id, dann die benutzer (die ja eigentlich durch die ID schon gruppiert sind) und dann gruppiert er noch nach der Zeitdifferenz. Also falls eine Zeitdifferenz gleich einer anderen ist, dann wird es zusammengefasst? Ich hab da gerade Probleme es zu verstehen, weil in meinem MySQL String nur nach Produkt und BenutzerID gruppoert wird.
 
Diese Sekunden die ich errechne, die muss ich laut meinem alten SQL Befehl noch aufsummieren. Jedoch funktioniert die Funktion SUM nicht. Hat da jemand noch ne Idee?

Vielen Dank!


Zum Verständnis mal den alten SQL Befehl:
(die where-clause mit week und year muss ich noch umsetzen. sonst ist alles schon drin. ja das Aufsummieren klappt noch nicht - aber darum gehts ja gerade)
Code:
SELECT B.Produkt As Programm, U.Name As Name, U.User AS ID, SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(TIME(B.Endzeit), B.Startzeit)))) AS Zeit from Benutzer B, Usernamen U 
	where U.User=B.User AND WEEK(B.Endzeit)=(WEEK(now())-1) AND YEAR(B.Endzeit)=YEAR(now())
	group by Programm, ID
	order by Produkt, Zeit DESC;
 

Neue Beiträge

Zurück