2014-05-08 11 views
8

Ich versuche, den Modus einer Reihe von idsofInterest in einer Tabelle, das jeweils mit einer begleitenden valueOfInterest so zu berechnen:TSQL-Modus (wie im Mittelwert, Median, Modus)

idsOfInterest | valueOfInterest 
2    | 1A 
2    | 1A 
2    | 3B 
1    | 2A 
1    | 2C 
1    | 2A 
4    | 3B 
4    | 3B 
4    | 4C 

aber mit Millionen von Zeilen .
Jede Liste von idOfInterest ist ausreichend lang, dass Multimodes kein Problem darstellen. Idealerweise möchte ich etwas wie

idsOfInterest | modeValueOfInterest 
1    | 2A 
2    | 1A 
3    | 3C 
4    | 3B 

Jede Hilfe geschätzt. (MS SQL Server 2008 verwenden)

+0

möglich Duplikat [SQL-Server-Modus SQL] (http://stackoverflow.com/questions/2045075/sql-server-mode-sql) –

+0

Es ist definitiv ein Duplikate, aber ich muss sagen, dass ich @ Gordon Linoffs Antwort mehr mag als jede andere Frage. – DeanOC

Antwort

11

Der Modus ist der häufigste Wert. Sie können diese erhalten mit Aggregation und row_number():

select idsOfInterest, valueOfInterest 
from (select idsOfInterest, valueOfInterest, count(*) as cnt, 
      row_number() over (partition by idsOfInterest order by count(*) desc) as seqnum 
     from table t 
     group by idsOfInterest, valueOfInterest 
    ) t 
where seqnum = 1; 
Verwandte Themen