Wer kann helfen? Mit Bezahlung

ja hmm welche Variante besser ist kann ich nicht sagen müsstest du mal auf den Explainplan schauen, aber denke die Join Version ist "besser".
hab dir noch ein paar Farben hinzugefügt und alles auf id_firma = 117 beschränkt.

SQL:
SELECT
a.id_firma,
a.autos,
p.preis,
n.navy,
r.red,
b.black,
s.silver
FROM( SELECT
    	id_firma,
    	COUNT(DISTINCT id_auto) AS autos
 	  FROM test
      WHERE id_firma = 117
 	  GROUP BY
       id_firma 
     ) a
JOIN(
	SELECT
    	id_firma,
    	COUNT(DISTINCT id_auto_preis) AS preis
 	FROM test
    WHERE id_firma = 117
 	GROUP BY
       id_firma 
	)p on p.id_firma = a.id_firma
LEFT JOIN(
	SELECT
    	id_firma,
    	MAX(color='n') AS navy
	FROM test
    WHERE id_firma = 117
	GROUP BY
    	id_firma
     ) n on n.id_firma =  a.id_firma
LEFT JOIN(
	SELECT
    	id_firma,
    	MAX(color='r') AS red
	FROM test
    WHERE id_firma = 117
	GROUP BY
    	id_firma
     ) r on r.id_firma =  a.id_firma
LEFT JOIN(
	SELECT
    	id_firma,
    	MAX(color='b') AS black
	FROM test
    WHERE id_firma = 117
	GROUP BY
    	id_firma
     ) b on b.id_firma =  a.id_firma
LEFT JOIN(
	SELECT
    	id_firma,
    	MAX(color='s') AS silver
	FROM test
    WHERE id_firma = 117
	GROUP BY
    	id_firma
     ) s on s.id_firma =  a.id_firma
 
Zuletzt bearbeitet von einem Moderator:
1.000 Danke. Das hätte ich alleine nicht hingekriegt. Also er läuft gerade. Ich sag bescheid, wenn er fertig ist, kann jetzt bestimmt 10 Minuten dauern^^
 
Es hat geklappt^^

Das freut mich jetzt richtig. DANKE******

Wie versprochen: Schick mir einfach per PN irgendwas(PayPAL, Bankverbindung, Anschrift), dann schick ich dir schon mal 50€. Hoffe, das ist nicht zu wenig.

Ich bräuchte jetzt noch eine Sache :(

Aktuell werden mir alle Firmen gelistet, die Verkäufe hatten. Ich habe hier noch eine Tabelle dort sind ALLE Firmen drin. Ich müsste nun nur noch alle fehlenden (hier auch wieder DISTINCT, weil die FirmenIDs in der Firmen-Tabelle häufiger vorkommen) hinzufügen. In der selbigen Tabelle stehen auch noch die ganzen Firmennamen, und wäre es dann noch möglich, die Namen zusätzlich Alphabetisch zu sortieren?
 
freut mich, dass es geklappt hat.

zahlen musst du nichts, steht ja nicht in der Rubrik entgeltlich und das Motto eines jeden Forums ist User helfen Usern.
Wenn es dir ein anliegen ist, spende es lieber tutorials.de ( falls überhaupt möglich habe eigentlich noch keinen Button gesehen) oder einer gemeinnützigen Organisation.

nun noch die Lösung deines Problems.
Wie auch oben habe ich in der where bedingung alles auf firma 117 eingeschränkt - musst du ggf. anpassen.
SQL:
SELECT
alle.id_firma,
alle.name_firma,
alle.adresse_firma,
a.autos,
p.preis,
n.navy,
r.red,
b.black,
s.silver
FROM(
	SELECT
		distinct id_firma,
		name_firma,
		adresse_firma
	FROM test2
        WHERE id_firma = 117
    ) alle
LEFT JOIN(
	 SELECT
    	id_firma,
    	COUNT(DISTINCT id_auto) AS autos
 	  FROM test
      WHERE id_firma = 117
 	  GROUP BY
       id_firma 
     ) a on a.id_firma = alle.id_firma
LEFT JOIN(
	SELECT
    	id_firma,
    	COUNT(DISTINCT id_auto_preis) AS preis
 	FROM test
    WHERE id_firma = 117
 	GROUP BY
       id_firma 
	)p on p.id_firma = alle.id_firma
LEFT JOIN(
	SELECT
    	id_firma,
    	MAX(color='n') AS navy
	FROM test
    WHERE id_firma = 117
	GROUP BY
    	id_firma
     ) n on n.id_firma =  alle.id_firma
LEFT JOIN(
	SELECT
    	id_firma,
    	MAX(color='r') AS red
	FROM test
    WHERE id_firma = 117
	GROUP BY
    	id_firma
     ) r on r.id_firma =  alle.id_firma
LEFT JOIN(
	SELECT
    	id_firma,
    	MAX(color='b') AS black
	FROM test
    WHERE id_firma = 117
	GROUP BY
    	id_firma
     ) b on b.id_firma =  alle.id_firma
LEFT JOIN(
	SELECT
    	id_firma,
    	MAX(color='s') AS silver
	FROM test
    WHERE id_firma = 117
	GROUP BY
    	id_firma
     ) s on s.id_firma =  alle.id_firma
ORDER BY
alle.name_firma asc
 
Zuletzt bearbeitet von einem Moderator:
Ja, du hast sicherlich recht, dass dieses Forum dem Zweck dient zu helfen, aber das hier war ja keine Kleinigkeit. Mich hat das richtig lang aufgehalten und ich habe ja auch oben geschrieben, dass ich dafür auch zahlen möchte. Es liegt bei dir, aber mit dem neuen Code-Block würde ich dir schon 70 Euro überweisen, du hast dir ja auch die ganzen Mühe gemacht. Finde ich nur gerecht.
 
SQL:
SELECT
alle.id_firma,
alle.name_firma,
alle.adresse_firma,
a.autos,
p.preis,
n.navy,
r.red,
b.black,
s.silver
FROM(
    SELECT
        DISTINCT id_firma,
        name_firma,
        adresse_firma
    FROM test2
        WHERE id_firma = 117
    ) alle
LEFT JOIN(
     SELECT
        id_firma,
        COUNT(DISTINCT id_auto) AS autos
      FROM test
      WHERE id_firma = 117
      GROUP BY
       id_firma 
     ) a ON a.id_firma = alle.id_firma
LEFT JOIN(
    SELECT
        id_firma,
        COUNT(DISTINCT id_auto_preis) AS preis
    FROM test
    WHERE id_firma = 117
    GROUP BY
       id_firma 
    )p ON p.id_firma = alle.id_firma
LEFT JOIN(
    SELECT
        id_firma,
        MAX(color='n') AS navy
    FROM test
    WHERE id_firma = 117
    GROUP BY
        id_firma
     ) n ON n.id_firma =  alle.id_firma
LEFT JOIN(
    SELECT
        id_firma,
        MAX(color='r') AS red
    FROM test
    WHERE id_firma = 117
    GROUP BY
        id_firma
     ) r ON r.id_firma =  alle.id_firma
LEFT JOIN(
    SELECT
        id_firma,
        MAX(color='b') AS black
    FROM test
    WHERE id_firma = 117
    GROUP BY
        id_firma
     ) b ON b.id_firma =  alle.id_firma
LEFT JOIN(
    SELECT
        id_firma,
        MAX(color='s') AS silver
    FROM test
    WHERE id_firma = 117
    GROUP BY
        id_firma
     ) s ON s.id_firma =  alle.id_firma
ORDER BY
alle.name_firma ASC

Hmm... da springt der irgendwie wieder raus. Kann es sein, dass da irgendwo ein Fehler ist, also ich habe nix gefunden.
 
Zuletzt bearbeitet von einem Moderator:
sollte eigentlich keinen Fehler haben, aber schreiben wir es mal anders :)
mehrere Wege führen nach Rom.

Bzw. was meinst du mit "springt raus" gibt's eine Fehlermeldung? oder ist die Laufzeit zu lang? Was verwendest du überhaupt für eine Datenbank :)?

SQL:
SELECT
alle.id_firma,
alle.name_firma,
alle.adresse_firma,
d.autos,
d.preis,
d.navy,
d.red,
d.black,
d.silver
FROM ( SELECT
		distinct id_firma,
                name_firma,
               adresse_firma
           FROM test2
           ORDER BY
           name_firma asc
      ) alle
LEFT JOIN (
    SELECT
    a.id_firma,
    a.autos,
    p.preis,
    n.navy,
    r.red,
    b.black,
    s.silver
    FROM( SELECT
            id_firma,
            COUNT(DISTINCT id_auto) AS autos
          FROM test
          WHERE id_firma = 117
          GROUP BY
           id_firma 
         ) a
    JOIN(
        SELECT
            id_firma,
            COUNT(DISTINCT id_auto_preis) AS preis
        FROM test
        WHERE id_firma = 117
        GROUP BY
           id_firma 
        )p ON p.id_firma = a.id_firma
    LEFT JOIN(
        SELECT
            id_firma,
            MAX(color='n') AS navy
        FROM test
        WHERE id_firma = 117
        GROUP BY
            id_firma
         ) n ON n.id_firma =  a.id_firma
    LEFT JOIN(
        SELECT
            id_firma,
            MAX(color='r') AS red
        FROM test
        WHERE id_firma = 117
        GROUP BY
            id_firma
         ) r ON r.id_firma =  a.id_firma
    LEFT JOIN(
        SELECT
            id_firma,
            MAX(color='b') AS black
        FROM test
        WHERE id_firma = 117
        GROUP BY
            id_firma
         ) b ON b.id_firma =  a.id_firma
    LEFT JOIN(
        SELECT
            id_firma,
            MAX(color='s') AS silver
        FROM test
        WHERE id_firma = 117
        GROUP BY
            id_firma
         ) s ON s.id_firma =  a.id_firma
   ) d on d.id_firma = alle.id_firma
 
Zuletzt bearbeitet von einem Moderator:
Super, beide funktionieren jetzt und ich glaube die zweite Variante ist auch noch um einiges schneller. Danke!

Also, wie gesagt, das Angebot steht noch: schick mir ne PN und ich überweis dir 70 Euro. Was du dann damit machst, ob du es spenden willst oder so, ist dir überlassen.

DANKE******
 
Auch wenn das Thema als erledigt zu betrachten ist, so frage ich mich, warum das hier
Code:
SELECT f.name_firma, f.adresse_firma
	, COUNT(DISTINCT(a.id_auto_preis)) AS preisanz
	, COUNT(DISTINCT(a.id_auto)) AS autoanz
	, MAX(a.color='n') AS navy
	, MAX(a.color='b') AS black
	, MAX(a.color='r') AS red
	, MAX(a.color='s') AS silver
	
	FROM autos a
	JOIN firma f ON f.id_firma=a.id_firma
	WHERE f.id_firma=117
	Group BY f.id_firma
nicht funktionieren soll? Im Ansatz wurde es ja bereits im Post #5 vorgeschlagen:rolleyes:

@vandamp: in deinem zuletzt geposteten Statement werden ALLE Firmen angezeigt, allerdings dann mit 'NULL' in den Spalten, bis auf die Firma, deren ID expliziet in den JOIN-Bedingungen genannt wurde...

Wie gesagt, Thema ist ja durch; mich hat nur das umständliche geJOINe verwundert, was m.E. nicht sein müsste. Es sei denn: ich habe was entscheidendes übersehen...:confused:
 
Zurück