2012-04-12 79 views
0

數量最多的一個字符串出現的TOP(1)我有兩列:使用SQL Server中獲得一列

INDEX  NAME 
125  john 
125  dave 
125  dave 
130  john 
131  dave 

我想用最出現的次數只返回名稱。然後我想把字符串放入一個變量中。什麼是我可以用來實現此目的的查詢?

這是SQL Server 2008和C#

+0

你能解釋一些嗎? – 2012-04-12 01:00:00

+0

我有一張桌子,裏面裝滿了名字。不要介意索引。我想查詢數據庫,它將返回最顯示的名稱。 我一直在使用'SELECT TOP(1)name,COUNT(*)FROM names_table GROUP BY name' 但是它並沒有完全解決。由於我在MS-SQL Management Studio中試過查詢,並且它沒有返回正確的值,就好像它以字母升序的方式返回它們(如果我寫10而不是1)。所以我應該得到的最高發生價值實際上並不是最高的,只是按升序排列。 – Alternatex 2012-04-12 01:12:12

回答

2

試試這個,它可能會給你你正在尋找的東西。

SELECT TOP 1 name 
    FROM names_table 
GROUP BY name 
ORDER BY COUNT(1) DESC; 

這與您最初的嘗試類似。只需將count()移至order by的位置,而不是選擇列表。

+1

爲什麼派生表?只要一個人做。 'SELECT TOP 1名稱FROM表GROUP BY BY ORDER BY COUNT(1)DESC'。 – 2012-04-12 01:09:01

+1

好點。 SELECT TOP 1 name FROM @tbl GROUP BY名稱 ORDER BY COUNT(1)DESC; 工作得很好,而且更乾淨。 – 2012-04-12 01:16:02

+0

這對我有效,謝謝。 – Alternatex 2012-04-12 01:40:45

0

如果你使用LINQ,你可以如下做到這一點:

var topName = MyDataContext.MyTable 
    .OrderByDescending(x => x.Index) 
    .Take(1) 
    .Select(x => x.Name); 
2

LinqToSql:

string mostFrequentName = myDataContext.Records 
    .GroupBy(x => x.Name) 
    .OrderByDescending(g => g.Count()) 
    //.ThenBy(g => g.Key) in case of ties, use this for consistent results 
    .Select(g => g.Key) 
    .FirstOrDefault(); 

的Sql :

SELECT top 1 Name 
FROM Records 
GROUP BY Name 
ORDER BY Count(*) desc --, Name --in case of ties