2016-11-07 7 views
1

Für meine mySQL-Datenbank versuche ich, den Durchschnitt der Finanzkennzahlen jedes Sektors anzuzeigen, so dass ich einen Benchmark-Wert pro Sektor haben kann.Problem beim Verweisen auf zwei SQL-Tabellen

  Companies 

| Firmenname | Ticker | Sektor |

 profitability 

| Ticker | profitMargin | returnOnAssets |

Meine Anfrage so weit ist diese

SELECT c.sector, AVG(p.profitMargin) , AVG(p.returnOnEquity) 
FROM Companies c, profitability p 
GROUP BY c.sector 

Meine Ausgabe jeden Sektor und ihre Mittelwerte zeigt, aber die Werte sind die gleichen für jedes Tupel, so dass ihr sie nicht richtig im Durchschnitt. Hilfe würde sehr geschätzt werden.

UPDATE * so habe ich versucht, die LEFT JOIN und es sieht auf jeden Fall besser,

query results

Ich nehme mein Problem an anderer Stelle aufgrund der NULL-Werte liegt. Weil die Werte in der tatsächlichen Beziehung nicht NULL sind.

+2

Sie sehen gerade eine cartesean Produkt zu erzeugen. Alle Datensätze aus der Firma werden mit allen Datensätzen in der Rentabilität verknüpft. Wie beziehen sich die Tabellen? Ticker? Wenn ja, scheint scaisEdge auf dem richtigen Weg zu sein. – xQbert

Antwort

0

Sie benötigen einen Join

SELECT c.sector, AVG(p.profitMargin) , AVG(p.returnOnEquity) 
FROM Companies c 
left join profitability p on c.ticker = p.ticker 
GROUP BY c.sector 
+0

Jetzt erscheint nur ein Sektor ... könnten meine Primärschlüssel falsch sein? – Donaldino

+1

Sie sollten Ihre Frage mit einem richtigen Datenmuster und dem erwarteten Ergebnis aktualisieren .. trotzdem versuchen Sie es mit linkem Join. (Einige Schlüssel konnten nicht übereinstimmen) .. Ich habe einen Ticker verwendet, weil die einzige gemeinsame Spalte ist – scaisEdge

+0

vielen Dank! Ich habe die Ergebnisse aktualisiert. Der Ticker ist der Primärschlüssel in beiden Relationen – Donaldino

Verwandte Themen