【发布时间】:2017-10-31 17:29:18
【问题描述】:
我的数据库中有以下架构:
CREATE TABLE categories (
id bigint NOT NULL,
name character varying NOT NULL,
ancestry character varying
);
CREATE TABLE video_chats (
id bigint NOT NULL,
name character varying NOT NULL,
category_id bigint NOT NULL
);
我有一些包含视频聊天的嵌套类别:
INSERT INTO categories (id, name, ancestry)
VALUES (1, 'Test category', null);
INSERT INTO categories (id, name, ancestry)
VALUES (2, 'Test category subcategory', '1');
INSERT INTO categories (id, name, ancestry)
VALUES (3, 'Test category subcategory', '1/2');
INSERT INTO video_chats (id, name, category_id)
VALUES (1, 'Test Video 1', '2');
INSERT INTO video_chats (id, name, category_id)
VALUES (2, 'Test Video 2', '3');
现在我想要一个 sql 查询来计算类别及其子类别的视频聊天。它应该返回以下结果:
- 测试类别 - 2 个视频聊天
- 测试类别子类别 - 1 视频聊天
- 测试类别子类别子类别 - 1 视频聊天
这是我的架构的 sqlfiddle:
http://sqlfiddle.com/#!17/f1cee/2
如何在 PostgreSQL 中做到这一点?
【问题讨论】:
-
我没有得到祖先的“1/2”值——那是怎么回事?..
-
这是我的 Ruby on Rails 应用程序中的数据库示例。我正在使用祖先宝石:github.com/stefankroes/ancestry
-
哦 - 我看到它不是分区(1/2 是一半) - 它是路径,所以下一个可能是
1/2/7等等。也许您还可以提供可读的预期查询结果?... -
它应该返回每行都有两列:
category_id、video_chats_count。 @VaoTsun
标签: sql postgresql