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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top