0

プログラムを作成しているので、データベースに対してクエリを実行して、特定の列に最も頻繁に表示される文字列を要求する必要があります。この例では、その「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

クエリを実行するとエラーが発生するため、SQLServerバージョンのクエリはありますか。これが私が正確にやりたいことの表の例です。

------------------------------------------------
|  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

著者Johnにとって最も(2)回表示されるため、「string-ONE」を返す必要があります。ただし、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.

編集を気にしないでください。ありがとうございました。

4

3 に答える 3

3

これは非常に簡単なクエリです(少なくともT-SQLでは):

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

ExecuteScalarは、実装の詳細により、2つの列がある場合でも、結果セットの唯一の行の最初の列であるため、文字列値を返します。ExecuteReaderを使用して、文字列が出現する回数にアクセスすることもできます。

于 2012-04-11T14:53:26.140 に答える
2
select top (1) SomeCol, count(*) as Row_Count
from YourTable
group by SomeCol
order by Row_Count desc

また、次のように、最も多く表示される文字列がなく、同じ回数表示される2つ以上の文字列がない場合はどうなりますか。

その場合、上記のクエリを使用して、任意の1つの行を取得します。追加with tiesして、同じ最高値を持つすべての行を取得できます。

select top (1) with ties SomeCol, count(*) as Row_Count
from YourTable
group by SomeCol
order by Row_Count desc
于 2012-04-11T15:10:04.027 に答える
1
SELECT max(counted) AS max_counted FROM (
   SELECT count(*) AS counted FROM counter GROUP BY date
 )

これはトリックを行うことができます

于 2012-04-11T14:52:55.890 に答える