如何进行查询以计算哪个字符串在某个列中出现最多

本文关键字:字符串 查询 何进行 计算 | 更新日期: 2023-09-27 18:30:49

我正在制作一个程序,我需要对数据库进行查询,询问给定列中最常出现的字符串。在这个例子中,它的"stringONE"。

----------------------------
|  ID  |  Column (string)  |
----------------------------
|  1   |     stringONE     |
----------------------------
|  2   |     stringTWO     |
----------------------------
|  3   |     stringONE     |
----------------------------
|  4   |     stringONE     |
----------------------------

现在我需要获取出现最多的字符串的名称并将其放入变量字符串中,例如:

string most_appeared_string = sql.ExecuteScalar();
此外,如果没有出现次数

最多的字符串,而是 2 个或更多出现次数相同的字符串,会发生什么情况,如下所示:

----------------------------
|  ID  |  Column (string)  |
----------------------------
|  1   |     stringONE     |
----------------------------
|  2   |     stringTWO     |
----------------------------
|  3   |     stringTWO     |
----------------------------
|  4   |     stringONE     |
----------------------------

谢谢。


@KeithS

您是否有查询的sql服务器版本,因为我在那里尝试时遇到一些错误。下面是我想精确执行的操作的表格示例。

------------------------------------------------
|  ID  |  column1 (string) |  author (string)  |
------------------------------------------------
|  1   |     string-ONE    |       John        |
------------------------------------------------
|  2   |     string-TWO    |       John        |
------------------------------------------------
|  3   |     string-ONE    |      Martin       |
------------------------------------------------
|  4   |     string-ONE    |       John        |
------------------------------------------------
SELECT TOP (1) column1, COUNT(*) FROM table WHERE author='John' ORDER BY ID

它应该返回"string-ONE",因为它对作者约翰来说出现次数最多 (2) 次。但是,在MS-SQL管理工作室中尝试查询时,这是我收到的错误:

Column 'table.column1' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

没关系编辑。谢谢。

如何进行查询以计算哪个字符串在某个列中出现最多

这是一个非常简单的查询(至少在 T-SQL 中):

select top 1 Column, Count(*) from Table group by Column order by Count(*) desc

ExecuteScalar 通过实现详细信息将返回字符串值,因为它是结果集中唯一行的第一列,即使有两列也是如此。您还可以使用 ExecuteReader 访问该字符串出现的次数。

select top (1) SomeCol, count(*) as Row_Count
from YourTable
group by SomeCol
order by Row_Count desc

另外,如果没有出现最多的字符串,会发生什么,而是 出现次数相同的 2 个或更多字符串,如下所示:

在这种情况下,使用上述查询,您将获得一个任意行。您可以添加with ties以获取具有相同最大值的所有行。

select top (1) with ties SomeCol, count(*) as Row_Count
from YourTable
group by SomeCol
order by Row_Count desc
SELECT max(counted) AS max_counted FROM (
   SELECT count(*) AS counted FROM counter GROUP BY date
 )

这可以解决问题