2016-01-13 1 views
1

J'ai une table avec une colonne non unique auth_id. Je dois sélectionner la valeur auth_id avec le nombre maximum d'entrées.Sélectionner la ligne avec la valeur maximale de la table

SELECT auth_id, cnt 
FROM (SELECT auth_id, COUNT(auth_id) AS cnt 
FROM articles_authors 
GROUP BY auth_id) articles_num 
WHERE cnt = (SELECT MAX(articles_num.cnt)) 

Voici l'exemple de données:

auth_id article_id 
1    2 
1    1 
1    3 
2    2 
3    1 
3    2 

Et la sortie:

auth_id cnt 
1   3 

Mais SQL ne voit pas la table d'alias articles_num. Comment faire cette clause WHERE avec cet alias?

+2

fournir quelques exemples de données et le résultat attendu de ceux-ci. –

Répondre

2

En utilisant une clause limit serait beaucoup plus simple - vous suffit de commander une requête selon un champ, puis prenez juste la première ligne:

SELECT auth_id, COUNT(auth_id) AS cnt 
FROM  articles_authors 
GROUP BY auth_id 
ORDER BY 2 DESC 
LIMIT 1 
+0

Cela fonctionne, mais que se passe-t-il si nous avons plusieurs auth_id avec un maximum d'entrées? – ihjn

1

Commandez vos données dans l'ordre décroissant dans votre requête intérieure puis juste prendre la première:

SELECT auth_id, cnt 
FROM (
    SELECT auth_id, COUNT(auth_id) AS cnt 
    FROM articles_authors 
    GROUP BY auth_id 
    ORDER BY cnt DESC 
    ) 
LIMIT 1 
0

Essayez cette .......

select auth_id, count(auth_id) as cnt 
from articles_authors 
group by auth_id 
order by cnt DESC 
limit 1; 

Permettez-moi de savoir si cela résout votre problème

1

Si je comprends bien, vous voulez vraiment obtenir une ligne du maximum du décompte:

SELECT auth_id, count(auth_id) as cnt 
FROM articles_authors 
GROUP BY 1 
ORDER BY 2 DESC 
LIMIT 1 

Si plus d'un auth_id ont même nombre max, nous besoin de mettre à jour ce SQL