Wer kann helfen? Mit Bezahlung

Tommy57

Erfahrenes Mitglied
Hallo,

ich komm an einer Stelle nicht mehr weiter. Wer kann mir schnell helfen und für wieviel? Bitte per PN schreiben!

Ich habe eine riesen Tabelle, die ich so auslesen muss, dass ich am Ende je $row nur eine id_firma habe, zu dieser die Anzahl der id_auto und der id_auto_preis. Zusätzlich muss ich wissen, welche Farben alle verfügbar sind. Das heißt, aus der Spalte color sollen später vier Spalten entstehen mit den jeweiligen farben als Boolean.

Ich brauche hierzu das korrekten SQL-Statement:

Tabelle

`id_auto_preis`
`id_auto`
`id_firma`
`year`
`color` ('n','r','b','s')


Output

Je Zeile eine id_firma von Jahr XXXX, die Spalten sehen dann wie folgt aus:

$row['id_firma']; <--- 'id_firma' um die es in dieser Zeile geht, darf immer nur einmal vorkommen
$row['autos']; <--- Anzahl aller 'id_auto' für die jeweilige id_firma
$row['preise']; <--- Anzahl aller 'id_auto_preis' für die jeweilige id_firma
$row['navy']; <--- 1 wenn 'id_firma' mindestens ein mal 'color' = 'n' hat, ansonsten 0
$row['red']; <--- 1 wenn 'id_firma' mindestens ein mal 'color' = 'r' hat, ansonsten 0
$row['black']; <--- 1 wenn 'id_firma' mindestens ein mal 'color' = 'b' hat, ansonsten 0
$row['silver']; <--- 1 wenn 'id_firma' mindestens ein mal 'color' = 's' hat, ansonsten 0


Die Einträge könnten in der Tabelle so aussehen:

1 2345 117 2008 n
2 2345 117 2008 b
3 2346 117 2008 b
4 2346 117 2008 n
5 2346 117 2008 n
6 4488 118 2008 r
7 4488 118 2008 r
8 4489 118 2008 b
9 4489 118 2008 b
...


Gruß
 
Select
If_Firma,
Count(distinct id_Auto),
count(Distinct id_Auto_Preis),
Min(Case when color= 'r' them 'ja' Else 'nein' end) As Red,
... alle farben
From table
Group by id_Firma


Sry für die schlechte Formatierung war grad zufällig am iPhone on und hab leider nicht die Tutorials App. Hoff dann wird es besser so ist es echt grauenhaft etwas zu schreiben

So Long
Vandamp
 
Hmm schade. Das funktioniert leider auch nicht. Hab die Rechtschreibfehler auch soweit korrigiert. Nur leider führt er das Statement nicht aus ;(
 
SQL:
SELECT
	id_firma,
	COUNT(DISTINCT id_auto) AS autos,
	COUNT(DISTINCT id_auto_preis) AS preise,
	MAX(color='n') AS navy,
	MAX(color='r') AS red,
	MAX(color='b') AS black,
	MAX(color='s') AS silver
FROM
	mytable
GROUP BY
	id_firma

Ungetestet und mit 2 Promille - Prost
 
Zuletzt bearbeitet von einem Moderator:
Danke für die Hilfe, aber irgendwie klappt es nicht. Vllt hängt das einfach mit der Größe der Tabelle zusammen. Die hat mehrere Millionen Einträge. Hab schon vieles probiert, aber bislang ohne Erfolg. Hab das Ganze in einem Try-Catch-Block und sobald ich das 'count' in das Statement rein setze springt er aus dem Ding raus und macht nix.
Ich versteh das nicht.

EDIT: Der springt NUR raus, wenn das count in Kombination mit anderen Befehlen steht. Das selbe gilt für die MAX Funktion. Ich weiß aber noch nicht warum.
 
Zuletzt bearbeitet:
Was gibt der catch-Block für eine Fehlermeldung?

Ist Performance ein Thema oder ist das egal? Wen ja, setzte mehrere SQLs ab und hole die Infos einzeln
SQL:
SELECT
    id_firma,
    COUNT(DISTINCT id_auto) AS autos
FROM
    mytable
GROUP BY
    id_firma;

SELECT
    id_firma,
    MAX(color='n') AS navy
FROM
    mytable
GROUP BY
    id_firma;

--etc
 
Zuletzt bearbeitet von einem Moderator:
Hi,

nein, Performance ist kein Thema. Das Resultat wird danach gecached. Kann man es denn irgendwie so schreiben, dass man mehrere Statements verschachtelt?

EDIT: Also so, dass es im Endeffekt trotzdem nur ein Statement ist.

Die Fehlermeldung kann ich aktuell nicht sagen, weil die Log-Datei merkwürdigerweise leer ist. So ein Mist...
 
Zuletzt bearbeitet:
hmm kannst du auf mehrere arten lösen.
Die Performance wir dadurch allerdings nicht besser, aber nen Versuch ist es wert.
per union oder per join.

JOIN variante
SQL:
SELECT
a.id_firma,
a.autos,
n.navy
FROM( SELECT
    	id_firma,
    	COUNT(DISTINCT id_auto) AS autos
 	  FROM test
 	  GROUP BY
       id_firma 
     ) a
JOIN(
	SELECT
    	id_firma,
    	MAX(color='n') AS navy
	FROM test
	GROUP BY
    	id_firma
     ) n on n.id_firma =  a.id_firma

UNION

SQL:
SELECT
id_firma,
sum(autos) AS autos,
sum(navy) AS navy
FROM 
(
SELECT
	id_firma,
	COUNT(DISTINCT id_auto) AS autos,
    0  AS navy
FROM test
GROUP BY
	id_firma 

UNION

SELECT
	id_firma,
	0 AS autos,
    MAX(color='n') AS navy
FROM test
GROUP BY
	id_firma
) n
GROUP BY
id_firma

P.S.: braucht du es nur 1 mal oder musst du es regelmäßig ausführen?
Ansonsten würd ich alle Werte einzeln ermitteln, wenn es funktioniert und dann im excel per sverweis verbinden.
 
Zuletzt bearbeitet von einem Moderator:
WOooooOW, sieht gut aus. Also der lädt schon seit n paar Minuten, aber sieht richtig gut aus^^

Hab jetzt mal die erste Variante genommen. Welche ist denn besser?

Wie müsste ich das denn jetzt noch anpassen, damit ich die restlichen Farben noch kriege und count(DISTINCT id_auto_preis) und wo kommt da die WHERE Bedingung hin?
 

Neue Beiträge

Zurück