Distinct / avg

Liebe Gemeinde,

auch über die Feiertage plagt mich ein kleines Problem. Die Verbindung einer select Abfrage mit distinct und der AVG Ermittlung einer Spalte.

Die Datenbank : ( mit Wohnungsangeboten )

id orstteil_1 strasse_1 qm_1 kalt_qm_1

01 Bockum Dorfweg 51.00 3.63
02 Bockum Dorfweg 51.00 3.63
03 Bockum Dorfweg 51.00 3.63
04 Bockum Stadtweg 51.00 4.65

Ziel der Abfrage soll es sein, den durchschnittlichen qm - Preis Kaltmiete zu ermitteln. Und zwar nach dem tatsächlich vorhandenen Wohnraum, nicht nach der Häufigkeit der Wohnungsangebote.

nach Angebotslage würde sich ein AVG(kalt_qm_1) von 3.885 € / qm für den Bezirk Bockum in der Größe 51.00 qm ergeben.
( 3.63+3.63+3.63+4.65)
Das Ergebnis muss aber sein (3.63 + 4.65 )/2 = 4.14 €

Das ist eine sehr schlichte Abfrage, trifft aber nicht das Problem, da diese jede Wohnung zählt. Und die Durchschnittsermittlung sich nicht auf den tatsächlichen Wohnraum bezieht. ( Wohnung 01 - 03 ist ein und die selbe. Ich habe es mit select distinct versucht, aber es ist schwieriger als erwartet.

$query_1 = mysql_query(„select ortsteil_1,qm_1,AVG(kalt_qm_1)AS dkalt_1 FROM wohnungsliste where qm_1= ‚$reg_qm_1‘ AND kalt_qm_1 > ‚0‘ GROUP BY ortsteil_1,qm_1 order by $ortsteil_1 asc“);

$reg_qm_1 ist die übergebene Variable aus dem Drop Down Feld.

Vielleicht hat jemand irgendwann einen Lösungsansatz. Würde mich freuen.

Frohes Fest, Tim

Moin, Tim,

schalte eine Query mit "Select distinct… " davor und benutze die als Input für die avg-Funktion.

Gruß Ralf

Moin,

ich versuche das mal. Danke.
Tim

Ich sehe 2 Möglichkeiten das Problem zu lösen:

  1. anstatt avg(kalt) zu verwenden, kannst du avg(distinct kalt) verwenden. Dann wird nur der Durchschnitt der unterschiedlichen Werte genommen. Das funktioniert in deinem einfachen Beispiel wunderbar, nur kann es natürlich sein, dass verschiedene Wohnungen die gleiche Kaltmiete haben, dies würde dann auch nicht gezählt.
    Beispiel-Abfrage:
    select ortsteil,qm,avg(distinct kalt) from wohnung group by ortsteil,qm

  2. Wie du selbst schreibst willst du den Durchschnittswert nur auf den Records welche verschieden sind (von der ID abgesehen), also wäre „distinct“ schon die Wahl. Verwende einfach das „distinct“-Query als Subquery (also anstelle der Tabelle).
    Beispiel-Abfrage:
    select sub.ortsteil,sub.qm,avg(sub.kalt) from (select distinct ortsteil,qm,kalt from wohnung) sub group by sub.ortsteil,sub.qm