2014-05-08 21 views
8

Sto cercando di calcolare la modalità di una serie di idsofInterest in una tabella, ciascuno con un accompagnamento valueOfInterest tali:modalità TSQL (come nella media, mediana, moda)

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

ma con milioni di righe .
Ogni elenco di idOfInterest è sufficientemente lungo che i multimodali non rappresentano un problema. Idealmente, vorrei qualcosa come

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

Qualsiasi aiuto apprezzato. (Utilizzo di MS SQL Server 2008)

+0

possibile duplicato di [SQL Server SQL modalità] (http://stackoverflow.com/questions/2045075/sql-server-mode-sql) –

+0

E 'sicuramente un duplicare, ma devo dire che mi piace la risposta di @Gordon Linoff più di ogni altra domanda. – DeanOC

risposta

11

La modalità è il valore più comune. È possibile ottenere questo con aggregazione e 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;