带有count的SQL语句

时间:2015-09-27 15:20:31

标签: mysql sql select count

我正在做一个功课,我对其中一个视图的SQL语句有问题。 基本上我有餐厅,可以发布帖子和用户可以喜欢邮政(很像Facebook喜欢的过程)。

我的想法是创建一个SQL查询,向我显示由RIF ='1123J'(例如)的餐馆制作的所有帖子以及每个帖子都有的喜欢数量。

这些是表格结构:

CREATE TABLE 'posts'(
    'ID' int(11) NOT NULL AUTO_INCREMENT, 
    'restaurant_rif' varchar(255) NOT NULL, 
    'content' text NOT NULL,
    'creation_date' datetime NOT NULL,
    PRIMARY KEY ('ID'),
    UNIQUE KEY 'ID' ('ID')
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;

CREATE TABLE 'likes' (
  'post_id' int(11) NOT NULL,
  'restaurant_rif' varchar(255) NOT NULL,
  'user_mail' varchar(255) NOT NULL,
  'liked_date' datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我应该或多或少地得到这样的答案:

+----------+------------+------------------+
| Post ID  | Contenido  |  Amount of Likes |
+----------+------------+------------------+
|     1    | Test 1     |       12         |
+----------+------------+------------------+
|     2    | Test 2     |       50         |
+----------+------------+------------------+
|     1    | Test 3     |       120        |
+----------+------------+------------------+

2 个答案:

答案 0 :(得分:2)

select *, (select count(*) from likes l where l.post_id = p.id) as num_likes
from posts p
where restaurant_rif = '<rif>' 

答案 1 :(得分:1)

您可以通过posts表的字段加入两个表和组。请注意,由于post id是唯一的,因此其他字段组不会再将其分解,但这是必需的,因为select列表中的所有字段都应该是group by的聚合表达式或项目} list:

SELECT   p.id, p.content, COUNT(*)
FROM     posts p
JOIN     likes l ON p.id = l.post_id
WHERE    p.restaurant_rif = '1123J'
GROUP BY p.id, p.content