Wie finde ich den häufigsten Wert in einer bestimmten Spalte in einer SQL-Tabelle?
Für diese Tabelle sollte two
sie 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 two
sie 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 column
und my_table
. Erhöhen 1
Sie, wenn Sie die N
häufigsten Werte der Spalte anzeigen möchten .
SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
WHERE 'value_occurrence' = 1
?
HAVING
anstelle von WHERE
in 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
/ HAVING
und aggregierte Spalten gibt, und ich ging immer davon aus, dass dies nicht funktionieren würde.
Betrachten wir den Tabellennamen als tblperson
und 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 nor
ist 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 AggCompanyName
ist 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 1
stattdessen; 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: