2016-04-04 10 views
1

グループの中で最も高い番号のグループはMAX()でうまくいきましたが、最も一般的なセルを取得したい場合はどうなりますか?一例として、カラム内の最も一般的なセルのMAXのような集約関数?

ID 
100 
250 
250 
300 
200 
250 

だから私はIDによってグループしたいとの代わりに、(MIN)最低または最高(MAX)数になるだろう、私は最も一般的なものを取得したいと思い(つまり、希望250、あるので3倍)。

SQL Server 2012には簡単な方法がありますか、私はを追加しなければなりません。SELECTここに私の最初のSELECTステートメントに何とか追加しますか?

+1

これは、 'select top with ties'で行うことができますが、私は完全にあなたのクエリを理解していません。私はむしろ説明を読むよりもあなたのコードを見るでしょう。 –

答えて

2

dense_rankを使用すると、最高のカウントを持つすべてのIDを返すことができます。これは、最高の数についての結びつきがある場合にも対応します。あなたがやりたい

select id from 
(select id, dense_rank() over(order by count(*) desc) as rnk from tablename group by id) t 
where rnk = 1 
1

簡単な方法はtoporder byを使用しています:

SELECT top 1 id 
FROM t 
GROUP BY id 
ORDER BY COUNT(*) DESC; 

これはmodeと呼ばれる統計値です。モードと最大値を取得することは、SQL Serverではやや難しい問題です。

WITH cte AS (
     SELECT t.id, COUNT(*) AS cnt, 
      row_number() OVER (ORDER BY COUNT(*) DESC) AS seqnum 
     FROM t 
     GROUP BY id 
    ) 
SELECT MAX(id) AS themax, MAX(CASE WHEN seqnum = 1 THEN id END) AS MODE 
FROM cte; 
+1

'with ties'を追加するか、警告を追加してください。 – lad2025

+0

@ lad2025。 。 。質問の中のすべてが特異です。私は注意します:複数のモードがある場合に最も一般的な複数の行が必要な場合は 'with ties'を使います。 –

+0

サブクエリを避けていいです。 – sagi

関連する問題