假设我正在编写一个简单的论坛并有表格:“用户”、“论坛”、“论坛订阅者”和“帖子”。'groups'、'posts' 和 'forum_subscribers' 引用 'user' 作为外键。
我想创建一个名为“user_profile”的视图,其中包括
- 用户订阅的论坛数量,
- 他们在 forum_x 中发布的帖子数量,以及
- 所有论坛中的帖子总数(您可以将组视为论坛或类别)。
如何使用 count() 函数执行此操作?
假设我正在编写一个简单的论坛并有表格:“用户”、“论坛”、“论坛订阅者”和“帖子”。'groups'、'posts' 和 'forum_subscribers' 引用 'user' 作为外键。
我想创建一个名为“user_profile”的视图,其中包括
如何使用 count() 函数执行此操作?
我认为你不能比 3 个联合做得更好(也许最后 2 个可以与 结合使用COUNT DISTINCT
)。我在下面对您的表结构做了很多假设,但我认为将其转换为您的结构应该很容易。
CREATE VIEW myView AS
SELECT user.id, CAST(posts.forum_id AS VARCHAR(20)) AS forum_id, COUNT(posts.id)
FROM user
JOIN posts ON user.id = posts.user_id
GROUP BY user.id, posts.forum_id
UNION
SELECT user.id, 'All forums', COUNT(posts.id)
FROM user
JOIN posts ON user.id = posts.user_id
GROUP BY user.id
UNION
SELECT user.id, 'Subscription count', COUNT(fs.forum_id)
FROM user
JOIN forum_subscribers fs ON user.id = fs.user_id
GROUP BY user.id