MYSQL group by和inner join

use*_*096 4 mysql inner-join subquery

我有一个文章表,其中包含每天的文章视图数量.创建新记录以保存每篇文章的每个单独日期的计数.

以下查询获取所有时间前5个已查看文章ID的文章ID和总观看次数:

SELECT article_id, 
SUM(article_count) as cnt
FROM article_views
GROUP BY article_id
ORDER BY cnt DESC
LIMIT 5 
Run Code Online (Sandbox Code Playgroud)

我还有一个单独的文章表,其中包含所有文章字段.我想修改上面的查询以加入文章表并为每个文章ID获取两个字段.我试图在下面这样做,但计数回复不正确:

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
Run Code Online (Sandbox Code Playgroud)

我不确定我做错了什么.我需要做一个子查询吗?

Mah*_*mal 10

添加articles.article_title, articles.artcile_urlGROUP BY条款:

SELECT 
  article_views.article_id, 
  articles.article_title, 
  articles.artcile_url,
  SUM( article_views.article_count ) AS cnt
FROM article_views
INNER JOIN articles ON articles.article_id = article_views.article_id
GROUP BY article_views.article_id,   
         articles.article_title, 
         articles.artcile_url
ORDER BY cnt DESC
LIMIT 5;
Run Code Online (Sandbox Code Playgroud)

您没有得到正确结果集的原因是,当您选择未包含GROUP BY在该SELECT子句中的聚合函数中的行时,MySQL会获取随机值.

  • 令我印象深刻的是,您似乎对数据结构的了解比问题中所介绍的要多得多。只有一点。MySQL 不会选择*随机*值。它选择一个*任意*值。*随机*表明可以选择任何值。事实上,它几乎总是第一条记录中的值——但您不能依赖这个事实。 (2认同)