Comment puis-je trouver la valeur la plus fréquente dans une colonne donnée dans une table SQL?
Par exemple, pour cette table, il doit renvoyer two
car il s'agit de la valeur la plus fréquente:
one
two
two
three
Comment puis-je trouver la valeur la plus fréquente dans une colonne donnée dans une table SQL?
Par exemple, pour cette table, il doit renvoyer two
car il s'agit de la valeur la plus fréquente:
one
two
two
three
Réponses:
SELECT `column`,
COUNT(`column`) AS `value_occurrence`
FROM `my_table`
GROUP BY `column`
ORDER BY `value_occurrence` DESC
LIMIT 1;
Remplacez column
et my_table
. Augmentez 1
si vous souhaitez afficher les N
valeurs les plus courantes de la colonne.
SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
WHERE 'value_occurrence' = 1
?
HAVING
place de WHERE
dans ce cas.
Essayez quelque chose comme:
SELECT `column`
FROM `your_table`
GROUP BY `column`
ORDER BY COUNT(*) DESC
LIMIT 1;
COUNT(*)
directement dans le ORDER BY
. Je savais qu'il y avait quelques restrictions concernant GROUP BY
/ HAVING
et les colonnes agrégées et j'ai toujours pensé que cela ne fonctionnerait pas.
Considérons le nom de la table comme tblperson
et le nom de la colonne comme city
. Je veux récupérer la ville la plus répétée de la colonne ville:
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)
Voici nor
un nom d'alias.
La requête ci-dessous semble bien fonctionner pour moi dans la base de données SQL Server:
select column, COUNT(column) AS MOST_FREQUENT
from TABLE_NAME
GROUP BY column
ORDER BY COUNT(column) DESC
Résultat:
column MOST_FREQUENT
item1 highest count
item2 second highest
item3 third higest
..
..
À utiliser avec SQL Server.
Comme il n'y a pas de support de commande de limite dans cela.
Vous pouvez utiliser la commande top 1 pour trouver la valeur maximale dans la colonne particulière dans ce cas (valeur)
SELECT top1
`value`,
COUNT(`value`) AS `value_occurrence`
FROM
`my_table`
GROUP BY
`value`
ORDER BY
`value_occurrence` DESC;
En supposant que la table est « SalesLT.Customer
» et que la colonne que vous essayez de comprendre est « CompanyName
» et AggCompanyName
est un alias.
Select CompanyName, Count(CompanyName) as AggCompanyName from SalesLT.Customer
group by CompanyName
Order By Count(CompanyName) Desc;
Si vous ne pouvez pas utiliser LIMIT ou LIMIT n'est pas une option pour votre outil de requête. Vous pouvez utiliser "ROWNUM" à la place, mais vous aurez besoin d'une sous-requête:
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
place; la syntaxe est indiquée dans la réponse acceptée.
Si vous avez une colonne ID et que vous souhaitez rechercher la catégorie la plus répétitive d'une autre colonne pour chaque ID, vous pouvez utiliser la requête ci-dessous,
Table:
Requete:
SELECT ID, CATEGORY, COUNT(*) AS FREQ
FROM TABLE
GROUP BY 1,2
QUALIFY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY FREQ DESC) = 1;
Résultat: