sagen, dass ich eine Tabelle mit den folgenden Informationen haben:Berechnung des Durchschnitts in distriubtion
Haltedauer als Anzahl der Tage zwischen Start & End berechnet Termine
ID Start_Date End_Date Reading Holding_Period
1 20140501 20160410 55 710
2 20150407 20151231 82 268
3 20160104 20160529 110 146
4 20140209 20160209 39 730
5 20131211 20151101 25 690
Für diesen Datensatz, erhalte ich die Häufigkeitsverteilung und durchschnittliche Haltedauer (hp) unter Verwendung der folgenden.
select YEAR(enddate)*100 + MONTH(enddate) as salemonth
,avg(hp) as hp
,sum(reading_0_50) as reading_0_50
,sum(reading_50_100) as reading_50_100
,sum(reading_100_150) as reading_100_150
from
(
select x.id
,x.enddate as enddate
,sum(x.hp) as hp
,sum(x.reading_0_50) as reading_0_50
,sum(x.reading_50_100) as reading_50_100
,sum(x.reading_100_150) as reading_100_150
from
( select id
,hp
,enddate
,case when reading >= 0 and reading <= 50 THEN 1 ELSE 0 END as reading_0_50
,case when reading > 50 and reading<= 100 THEN 1 ELSE 0 END as reading_50_100
,case when reading > 100 and reading<= 150 THEN 1 ELSE 0 END as reading_100_150
from readings
)x
group by x.id,x.enddate
) p
group by YEAR(enddate)*100 + MONTH(enddate)
Das gibt mir die Ausgabe
salemonth hp reading_0_50 reading_50_100 reading_100_150
201511 690 1 0 0
201512 268 0 1 0
201602 730 1 0 0
201604 710 0 1 0
201605 146 0 0 1
jedoch der Durchschnitt HP ist über den Monat
Meine Frage lautet:. , wenn ich den durchschnittlichen HP-Wert mit dem Binned Bucket ermitteln soll, wie mache ich das in SQL?
Vielen Dank im Voraus für das Lesen.
In Ihrer innersten Abfrage definieren Sie die Buckets nach Trefferanzahl. Definieren Sie die Buckets erneut, aber geben Sie stattdessen HP sonst 0 zurück. Dann AVG() sie in den nächsten Abfragen. – Malk
Danke @Malk für die Antwort. Du meinst das Hinzufügen dieser Rechte:, Fall beim Lesen> = 0 und Lesen <= 50 THEN HP ELSE 0 END als hp_reading_0_50 , Fall beim Lesen> 50 und Lesen <= 100 THEN HP ELSE 0 END als hp_reading_50_100 , Fall beim Lesen> 100 und lesen <= 150 THEN HP ELSE 0 END als hp_reading_100_150. Ich habe das früher versucht, bekam nicht die richtigen Durchschnittswerte. Also frage mich, was ich falsch mache. – Bee