MYSQL groupe par et inner join
J'ai un article de la table qui contient le nombre d'articles de vues pour chaque jour. Un nouvel enregistrement est créé pour contenir le nombre de chaque autre journée pour chaque article.
La requête ci-dessous récupère l'id de l'article et le total des points de vue pour le top 5 vu l'id de l'article pour tous les temps :
SELECT article_id,
SUM(article_count) as cnt
FROM article_views
GROUP BY article_id
ORDER BY cnt DESC
LIMIT 5
J'ai aussi un article distinct de la table qui contient tous les champs de l'article. Je veux ammend la requête ci-dessus à se joindre à l'article de la table et obtenir deux champs pour chaque id de l'article. J'ai essayé de le faire ci-dessous, mais le comte est en revenant de manière incorrecte :
SELECT article_views.article_id, SUM( article_views.article_count ) AS cnt, articles.article_title, articles.artcile_url
FROM article_views
INNER JOIN articles ON articles.article_id = article_views.article_id
GROUP BY article_views.article_id
ORDER BY cnt DESC
LIMIT 5
Je ne sais pas exactement ce que im faire de mal. Ai-je besoin de faire une sous-requête?
OriginalL'auteur user1052096 | 2013-01-24
Vous devez vous connecter pour publier un commentaire.
Ajouter
articles.article_title, articles.artcile_url
à laGROUP BY
clause:La raison pour laquelle vous n'obtenaient pas un résultat correct, est que lorsque vous sélectionnez des lignes qui ne sont pas inclus dans le
GROUP BY
ni dans une fonction d'agrégation dans leSELECT
clause de MySQL ramasse valeur aléatoire.Si il arrive à être rangées dans la
article
table qui correspondent àarticle_id
,article_title
etarticle_url
, (c'est à dire en l'absence d'une garantie que la combinaison de ces trois est unique), puis les comtes retourné par cette requête sont toujours soumis à la "coupure", par rapport à la requête initiale. (Il laisse à se demander pourquoi il y aurait des doublons dans une colonne nommée "article_id
" dans le "article
" de la table.)OriginalL'auteur Mahmoud Gamal
Vous utilisez une base de données MySQL (sig) en fonction appelée les Colonnes Masquées, parce que le titre de l'article n'est pas dans le
group by
. Cependant, cela peut ou peut ne pas être la cause de votre problème.Si les chiffres sont mauvais, alors je pense que vous avez en double
article_id
dans l'article de la table. Vous pouvez le vérifier en faisant:Si tout semble, alors c'est votre problème. Si ils ont tous des titres différents, de les grouper par le titre (comme suggéré par Mahmoud) peut résoudre le problème.
Si non, un moyen pour résoudre ce problème est la suivante:
Ce choisit un abitrary titre pour l'article.
cnt
valeur ne sera pas gonflé en raison de dupliquerarticle_id
valeurs qui se produisent dans learticles
table; il serait préférable de l'isoler à la requête de cette façon.OriginalL'auteur Gordon Linoff
Votre requête est fondamentalement le droit de me...
Mais la valeur retournée pour
cnt
va dépendre dearticle_id
colonne UNIQUE dans learticles
table. On suppose que c'est la clé primaire, et en l'absence d'une définition de schéma, ce n'est qu'une hypothèse.)Aussi, nous sommes enclins à supposer qu'il y a de clé étrangère entre les tables, qui est, il n'existe pas de valeurs de
article_id
dans learticles_view
table qui ne correspondent pas à une valeur dearticle_id
sur une ligne de laarticles
table.À cocher pour "orphelines" article_id valeurs, l'exécution d'une requête comme:
À cocher pour "dupliquer" article_id valeurs dans les articles, l'exécution d'une requête comme:
Si l'une de ces requêtes renvoie des lignes, qui pourrait être une explication pour le comportement à observer.
OriginalL'auteur spencer7593