如何进行查询以计算哪个字符串在某个列中出现最多
本文关键字:字符串 查询 何进行 计算 | 更新日期: 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
)
这可以解决问题