SQL 带计数的语句
SQL statement with count
我正在做作业,但其中一个视图的 SQL 语句有问题。
基本上,我得到了可以制作 post 的餐厅和可以点赞 Post 的用户(很像 Facebook 的点赞过程)。
我的想法是创建一个 SQL 查询,向我显示 RIF = '1123J'(例如)的餐厅制作的所有 post 以及每个 post 有。
这些是表格结构:
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 |
+----------+------------+------------------+
您可以加入两个 table 并按 posts
table 的字段分组。请注意,由于 post id 无论如何都是唯一的,因此按其他字段分组不会再对其进行细分,但这是必需的,因为 select
列表中的所有字段都应该是聚合表达式或group by
列表:
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
select *, (select count(*) from likes l where l.post_id = p.id) as num_likes
from posts p
where restaurant_rif = '<rif>'
我正在做作业,但其中一个视图的 SQL 语句有问题。 基本上,我得到了可以制作 post 的餐厅和可以点赞 Post 的用户(很像 Facebook 的点赞过程)。
我的想法是创建一个 SQL 查询,向我显示 RIF = '1123J'(例如)的餐厅制作的所有 post 以及每个 post 有。
这些是表格结构:
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 |
+----------+------------+------------------+
您可以加入两个 table 并按 posts
table 的字段分组。请注意,由于 post id 无论如何都是唯一的,因此按其他字段分组不会再对其进行细分,但这是必需的,因为 select
列表中的所有字段都应该是聚合表达式或group by
列表:
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
select *, (select count(*) from likes l where l.post_id = p.id) as num_likes
from posts p
where restaurant_rif = '<rif>'