【问题标题】:SQL statement with count带计数的 SQL 语句
【发布时间】:2015-09-27 15:20:31
【问题描述】:

我正在做作业,但其中一个视图的 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        |
+----------+------------+------------------+

【问题讨论】:

  • 如果这是家庭作业,那么您无疑已经尝试了一些东西。请编辑您的问题以显示您的尝试。
  • 是的,正如@GordonLinoff 建议的那样,您应该向我们展示您的尝试

标签: mysql sql select count


【解决方案1】:
select *, (select count(*) from likes l where l.post_id = p.id) as num_likes
from posts p
where restaurant_rif = '<rif>' 

【讨论】:

  • 这工作只是完美!我在括号外进行计数并选择*,但我有“语法”错误。我不知道你可以这样做(我不想使用加入)。谢谢!
  • 所以你知道技术术语,它被称为相关标量子查询。
【解决方案2】:

您可以连接这两个表并按posts 表的字段进行分组。请注意,由于帖子 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

【讨论】:

  • 你能在 MySQL 中按文本列分组吗?
  • 感谢@Mureinik 的编辑。我不知道该怎么做。
猜你喜欢
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
相关资源
最近更新 更多