Wie finde ich den häufigsten Wert in einer bestimmten Spalte in einer SQL-Tabelle?
Für diese Tabelle sollte twosie beispielsweise zurückgegeben werden, da dies der häufigste Wert ist:
one
two
two
three
Wie finde ich den häufigsten Wert in einer bestimmten Spalte in einer SQL-Tabelle?
Für diese Tabelle sollte twosie beispielsweise zurückgegeben werden, da dies der häufigste Wert ist:
one
two
two
three
Antworten:
SELECT `column`,
COUNT(`column`) AS `value_occurrence`
FROM `my_table`
GROUP BY `column`
ORDER BY `value_occurrence` DESC
LIMIT 1;
Ersetzen columnund my_table. Erhöhen 1Sie, wenn Sie die Nhäufigsten Werte der Spalte anzeigen möchten .
SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
WHERE 'value_occurrence' = 1?
HAVINGanstelle von WHEREin diesem Fall verwenden.
Versuchen Sie etwas wie:
SELECT `column`
FROM `your_table`
GROUP BY `column`
ORDER BY COUNT(*) DESC
LIMIT 1;
COUNT(*)direkt in der verwenden kann ORDER BY. Ich wusste, dass es einige Einschränkungen in Bezug auf GROUP BY/ HAVINGund aggregierte Spalten gibt, und ich ging immer davon aus, dass dies nicht funktionieren würde.
Betrachten wir den Tabellennamen als tblpersonund den Spaltennamen als city. Ich möchte die am häufigsten wiederholte Stadt aus der Stadtspalte abrufen:
select city,count(*) as nor from tblperson
group by city
having count(*) =(select max(nor) from
(select city,count(*) as nor from tblperson group by city) tblperson)
Hier norist ein Aliasname.
Die folgende Abfrage scheint für mich in der SQL Server-Datenbank gut zu funktionieren:
select column, COUNT(column) AS MOST_FREQUENT
from TABLE_NAME
GROUP BY column
ORDER BY COUNT(column) DESC
Ergebnis:
column MOST_FREQUENT
item1 highest count
item2 second highest
item3 third higest
..
..
Zur Verwendung mit SQL Server.
Da es darin keine Unterstützung für Limit-Befehle gibt.
In diesem Fall können Sie den Befehl top 1 verwenden, um den maximal vorkommenden Wert in der jeweiligen Spalte zu ermitteln (Wert).
SELECT top1
`value`,
COUNT(`value`) AS `value_occurrence`
FROM
`my_table`
GROUP BY
`value`
ORDER BY
`value_occurrence` DESC;
Angenommen, Tabelle ist ' SalesLT.Customer' und die Spalte, die Sie herausfinden möchten, ist ' CompanyName' und AggCompanyNameist ein Alias.
Select CompanyName, Count(CompanyName) as AggCompanyName from SalesLT.Customer
group by CompanyName
Order By Count(CompanyName) Desc;
Wenn Sie LIMIT nicht verwenden können oder LIMIT keine Option für Ihr Abfragetool ist. Sie können stattdessen "ROWNUM" verwenden, benötigen jedoch eine Unterabfrage:
SELECT FIELD_1, ALIAS1
FROM(SELECT FIELD_1, COUNT(FIELD_1) ALIAS1
FROM TABLENAME
GROUP BY FIELD_1
ORDER BY COUNT(FIELD_1) DESC)
WHERE ROWNUM = 1
ROWNUM
LIMIT 1stattdessen; Die Syntax wird in der akzeptierten Antwort angezeigt.
Wenn Sie eine ID-Spalte haben und für jede ID die sich am meisten wiederholende Kategorie aus einer anderen Spalte suchen möchten, können Sie die folgende Abfrage verwenden:
Tabelle:

Abfrage:
SELECT ID, CATEGORY, COUNT(*) AS FREQ
FROM TABLE
GROUP BY 1,2
QUALIFY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY FREQ DESC) = 1;
Ergebnis:
