2016-10-12 2 views
0

Ich habe eine Beispieltabelle namens Table1. In der Tabelle gibt es zwei Spalten ID und Age. Ich möchte den Medianwert über dem Alter berechnen. Dazu i aufBerechnung Median über eine Spalte mit SQL

folgende SQL-Abfrage gesetzt haben
SELECT Age as Median FROM 
    (SELECT a1.Age, COUNT(a1.Age) Rank 
    FROM Table1 a1, Table1 a2 
    WHERE a1.Age < a2.Age OR a1.Age=a2.Age 
    group by a1.Age 
    order by a1.Age desc) a3 
    WHERE Rank = (SELECT (COUNT(*)+1) DIV 2 FROM Table1); 

Aber ich bin immer Syntaxfehler

syntax error in query expression Rank = (SELECT (COUNT(*)+1) DIV 2 FROM Table1) 

Bitte sagen, wo in i

+1

Welche DBMS verwenden Sie? –

+0

Es gibt viele Beispiele für solche Dinge da draußen. Vielleicht fehlt Ihnen eine Suchmaschine – Strawberry

+0

Definieren Sie Median, bitte. –

Antwort

0

fehlt bin ich nicht glaube, MS Access SQL hat ein DIV Betreiber.

Ich denke, Sie müssen umgehen es mit / 2 (dividieren durch 2, was zu einem doppelten Float) oder * 0.5 (multipliziert auf die Hälfte, was zu einem festen Punkt Dezimal), dann die Ganzzahl z. mit INT(), notieren es immer runden, so dass INT(0.9) == 0 und INT(-0.1) == -1 aber da die COUNT gesetzt Funktion (Kardinalität) kann nicht einen negativen Wert zurückgeben, sollten Sie das erwartete Ergebnis erhalten, z.

SELECT INT((COUNT(*) + 1)/2) FROM Table1 
0

Ich habe die folgende Abfrage versucht. Es funktioniert jetzt

SELECT Age as Median FROM 
    (SELECT a1.Age, COUNT(a1.Age) as Rank 
    FROM Table1 a1, Table1 a2 
    WHERE a1.Age < a2.Age OR a1.Age=a2.Age 
    group by a1.Age 
    order by a1.Age desc) a3 
    WHERE Rank =(SELECT INT((COUNT(*) + 1) *0.5) FROM Table1); 
Verwandte Themen