在SQL Server中使用TOP(1)获取列中字符串出现次数最多

时间:2012-04-12 00:56:12

标签: c# sql-server

我有两列:

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

我想只返回出现次数最多的名称。然后我想把字符串放入变量中。我可以用什么查询来实现这个目标?

这适用于SQL Server 2008和C#

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

试试这个,它可能会给你你想要的东西。

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

这与您最初尝试的类似。只需将count()移动到顺序,而不是选择列表。

答案 2 :(得分:0)

如果你正在使用LINQ,你可以按照以下方式进行:

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