Mysql select 来自另一个 table 的 sum()

Mysql select sum() from another table

我有这个 tables :

Table:文章

   id   |   title   |   display   |
 -----------------------------------
    1   |   Fkekc   |      1      |
    2   |   ldsdf   |      1      |
    3   |   OTRld   |      0      |
    4   |   QCRSA   |      1      |

Table:赞

   id  |  article_id |   like   |  type
 ----------------------------------------
    1   |      1     |   121    |   1
    2   |      1     |   652    |   2
    3   |      2     |   12     |   1
    4   |      1     |   5      |   3

我想得到这个结果:

Article [1] => 778
Article [2] => 12
Article [3] => 0
Article [4] => 0

我在两个 table 之间使用 LEFT JOIN,但是这个 return 记录每个 likes table。所以我得到了文章1的三个记录

我的代码:

 SELECT articles.*,likes.like FROM `articles` LEFT JOIN `likes` ON articles.id=likes.article_id WHERE display='1'

我知道我必须使用 SUM() 但我不知道如何使用它

根据你的回答,我发现我必须使用这个:

SELECT articles.*, sum(likes.like) as likesSum FROM `articles` LEFT JOIN `likes`ON articles.id=likes.article_id WHERE display='1' GROUP BY articles.id

但我想在查询中设置过滤器。所以使用这个:

SELECT articles.*, sum(likes.like) as likesSum FROM `articles` LEFT JOIN `likes`ON articles.id=likes.article_id WHERE display='1' && likesSum>='100' GROUP BY articles.id

但是上面的代码没有return任何结果

  SELECT articles.*, sum(likes.like) as likesSum FROM `articles` LEFT JOIN `likes`ON articles.id=likes.article_id WHERE display='1' GROUP BY articles.id

你做的都对,就是少了一个。你应该使用 group by

SELECT articles.*, likes.like 
FROM `articles` 
LEFT JOIN `likes` ON articles.id = likes.article_id 
WHERE display = '1' 
GROUP BY likes.article_id

这种可视化表示非常有助于理解联接:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

这应该非常适合你..

SELECT articles.id, sum(likes.like) from articles left join likes on (articles.id=likes.article_id) group by articles.id order by articles.id

查看 SUM() 与 GROUP BY 的用法

这是您的查询

SELECT articles.*,COALESCE(sum(likes.like),0) as total_like  FROM 
`articles` LEFT JOIN `likes` ON articles.id=likes.article_id group by   
articles.id

输出为