Bester Weg zu einem Median In Access 2007 zu berechnen, wenn Verwendung von Gruppierungs
-
11-07-2019 - |
Frage
Ich habe eine Tabelle, die ein Buch enthält und dann mehr Preise über das Buch (das ist ein stark vereinfachtes Beispiel):
ID BOOK PRICE 1 BOOK1 10 2 BOOK1 15 3 BOOK1 12 4 BOOK2 8 5 BOOK2 2
Ich Berechnung leicht den Durchschnitt, aber es muss eine nette Art und Weise sein, den Median zu berechnen?
Aktuelle SQL:
SELECT DISTINCTROW Books.BOOK, Avg(Books.PRICE) AS [Avg Of PRICE]
FROM Books
GROUP BY Books.BOOK;
Ergebnisse:
BOOK Avg Of PRICE BOOK1 12.3333333333333 BOOK2 5
Lösung
Es gibt keinen Median in Jet SQL, es sei denn, es für das Jahr 2007 hinzugefügt wurde, aber hier ist eine Idee, wie man zu erhalten. Sie müssen ...
Einige SQL ...
SELECT Statistics.Month, Sum(([SentTo])) AS [Sum Sent], fMedian("Statistics","Month",[Month],"SentTo") AS [Median Sent]
FROM Statistics
GROUP BY Statistics.Month;
Und ein User Defined Function (UDF).
Function fMedian(SQLOrTable, GroupFieldName, GroupFieldValue, MedianFieldName)
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs1 = db.OpenRecordset(SQLOrTable, dbOpenDynaset)
If IsDate(GroupFieldValue) Then
GroupFieldValue = "#" & GroupFieldValue & "#"
ElseIf Not IsNumeric(GroupFieldValue) Then
GroupFieldValue = "'" & Replace(GroupFieldValue, "'", "''") & "'"
End If
rs1.Filter = GroupFieldName & "=" & GroupFieldValue
rs1.Sort = MedianFieldName
Set rs = rs1.OpenRecordset()
rs.Move (rs.RecordCount / 2)
If rs.RecordCount Mod 2 = 0 Then
varMedian1 = rs.Fields(MedianFieldName)
rs.MoveNext
fMedian = (varMedian1 + rs.Fields(MedianFieldName)) / 2
Else
fMedian = rs.Fields(MedianFieldName)
End If
End Function
Von: LessThanDot Wiki
Andere Tipps
Median werden kann in MS Access mit nur regelmäßige Abfragen und ohne VBA berechnet werden. Median ist der 50. Perzentile. So erstellen Auswahlabfragen normalerweise; geht dann in SQL-Ansicht und umfasst „Top 50 Prozent“ nach Schlagwort wählen. ascending zum Boden 50 Prozent; absteigend sortiert für Top 50 Prozent. findet dann maximal unten Prozent Ergebnismenge und mindestens oben Prozent Ergebnismenge. Der Durchschnitt dieser beiden ist der Median. Als „Top 50 Prozent“ sicher, dass Kriterien in der Abfrage für das Ergebnis spezifisch ist Satz, aus dem Medianwert berechnet werden.
Es gibt keine integrierte Funktion ist -. So haben Sie Code in einer Schleife durch die Datensätze zu verwenden, und den mittleren selbst calc
Verwenden Sie google - es gibt viele Code-Beispiele gibt,
Ich habe versucht, nicht-VBA-Methoden zu verwenden und sie sind alle etwas begrenzt und nicht in der Lage, Ihnen das genaueste Ergebnis für eine größere Datenmenge zu geben. Für die Top 50 Prozent Asc (Max) und Top-50-Prozent-Beschr (Min) Methode hat Zugriff eine Einschränkung und es lässt einzelne Werte, wenn aufsteigend geordnet. Für Abrundung wird Zugang Banker mit Rundung so ist es nicht immer Aufrunden je nach dem Wert selbst, benötigen Sie einen nachgestellten Wert von + -,00001 hinzufügen, wenn Sie oder nach unten abrunden wollen. Ich habe auch eine andere Rang () Methode ohne VBA und Zugriffs Probleme Ranking Werte sind, die zumindest ein Paar identischer Werte aufweist. Aus oben genannten Gründen schlage ich kleben stark auf die Schaffung Funktion in VBA anpassen.