比如有一个商品表
表中有裤子,上衣,鞋等等分类
每种分类有多条分类相同的信息,
比如裤子有 短裤,长裤,开裆裤等等
如何查询到一个结果集,结果集中,裤子有N条信息,上衣有N条信息,鞋有N条信息 N == N
因为分类也有好多种,如何查询所有分类满足上面约束的信息呢?
如果是每次查询都是固定的分类,那么直接写多条查询,最后把他们用 Union 合并起来。如果你需要完全动态地获得分类,那么需要写存储过程来实现了。
这个需求可以使用窗口功能来搞定,PostgreSQL提供了这个功能:
digoal=# create table tbl (id int, class1 int, class2 int);
CREATE TABLE
digoal=# insert into tbl values (1,1,1),(2,1,2),(3,1,3),(4,2,7),(5,2,8),(6,3,1),(7,3,8);
INSERT 0 7
digoal=# select count(*) over(partition by class1) cn,* from tbl;
cn | id | class1 | class2
----+----+--------+--------
3 | 1 | 1 | 1
3 | 2 | 1 | 2
3 | 3 | 1 | 3
2 | 4 | 2 | 7
2 | 5 | 2 | 8
2 | 6 | 3 | 1
2 | 7 | 3 | 8
(7 rows)
digoal=# select * from (select count(*) over(partition by class1) cn,* from tbl)t where cn=2;
cn | id | class1 | class2
----+----+--------+--------
2 | 4 | 2 | 7
2 | 5 | 2 | 8
2 | 6 | 3 | 1
2 | 7 | 3 | 8
(4 rows)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。