mysql 4.01 Query schlägt fehl

maniak666

Grünschnabel
Ich möchte gerne folgenden Query absetzen, leider jedoch schlägt dieser fehl...
Ich bekomme immer ein (Query liefert mehrere Datensätze), dabei kann es doch nur einen geben, oder nicht? also die Kombination
Code:
    		     		  month = a.month
   		  AND  land = a.land
   		  AND  typ = 1
   		  AND  bl = a.bl
   		  AND  btyp = a.btyp
Sollte eindeutig sein.

Ich wäre für konstruktive Kritik/Hilfe sehr dankbar!
Code:
SELECT
  	a.year	  ,
  	a.month	 ,
 	a.land	 		 	AS Country,
 	a.bl	 		 		AS BL,
 	a.typ		 		 		AS typ,
 	a.btyp		 		 	AS btyp,
 	sum(a.imp) 				as Imps,
 	sum(a.umsatz) 	 			AS revenue,
  	(sum(a.umsatz) *1000)/ sum(a.imp) as eCPM,
  	( SELECT DISTINCT sum(b.imp)
  		  FROM datenbank as b
  		  GROUP BY year, month, land,bl,typ, btyp
  		  HAVING year = a.year
  		  AND month = a.month
  		  AND land = a.land
  		  AND typ = 1
  		  AND bl = a.bl
  		  AND btyp = a.btyp ) AS test
  FROM datenbank a
  GROUP BY 
  a.year,
  a.month,
  a.land,
  a.bl,
  a.btyp
  HAVING
  a.year = '2004'
  AND
  a.month = '07'
  AND
  a.typ = 1
  ORDER BY
  a.year,
  a.month,
  a.land,
  a.bl,
  a.btyp
 
Habe es mir nur oberflächlich angeschaut und nicht "durchgespielt". Was Probleme verursachen könnte ist die HAVING-Bedingung im Subquery. Versuche mal b.year=a.year usw.
Außerdem fehlt das AS in FROM datanbank AS a.
Wenn das noch nicht hilft, schaue ich noch mal genauer hin. Dann ist vermutlich irgendwo ein logischer Fehler.

Gruß hpvw
 
b.year=a.year usw. verursacht lediglich ein year could not be found...

AM as hats auch nicht gelegen. und soweit ich weiss ist das auch fakultativ. Aber trotzdem danke für die schnelle AW!
 
maniak666 hat gesagt.:
und soweit ich weiss ist das auch fakultativ.
Da hast recht, ich habe eben noch mal nachgeschaut.

Wenn ich Dich richtig verstehe ergibt das "Hauptquery" mehrere Datensätze und soll nach Deiner Meinung nur einen ergeben?

Das ist jedoch nicht richtig:
Du gruppierst nach mehreren Feldern. Es werden also die Zeilen zusammengefasst, bei denen alle diese Felder jeweils gleich sind. Im HAVING (was IMHO eher ein WHERE sein sollte) stehen jedoch nicht alle dieser Felder. Hast Du also zwei Datensätze, in denen die Felder der HAVING-Klausel der Bedingung entsprechen (und somit gleich sind), die anderen Felder des GROUP BY jedoch unterschiedlich sind, erhältst Du mehr als eine Ergebniszeile.

Hoffentlich habe ich Dein Problem richtig verstanden, ansonsten versuche es bitte noch mal etwas detaillierter zu beschreiben.

Gruß hpvw
 
Zurück