我正在创建一个程序,我需要对数据库进行查询,询问在给定列中最常出现的字符串。在这个例子中,它的“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-server版本的查询,因为我在那里尝试时遇到了一些错误。这是我想要做的事情的表格示例。
------------------------------------------------
| 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”,因为它似乎是作者John的最多(2)次。在MS-SQL Management Studio中尝试查询时,这是我得到的错误:
Column 'table.column1' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
没关系编辑。谢谢。
答案 0 :(得分:3)
这是一个非常简单的查询(至少在T-SQL中):
select top 1 Column, Count(*) from Table group by Column order by Count(*) desc
ExecuteScalar,通过实现细节,将返回字符串值,因为它是结果集中唯一行的第一列,即使有两列。您还可以使用ExecuteReader来访问字符串发生的次数。
答案 1 :(得分:2)
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
答案 2 :(得分:1)
SELECT max(counted) AS max_counted FROM (
SELECT count(*) AS counted FROM counter GROUP BY date
)
这可以解决问题