Toggle navigation
PostgreSQL中文社区
首页
(current)
社区新闻
中文文档
加入ACE
相关资料
了解PostgreSQL
PostgreSQL相关文档
PostgreSQL软件下载
PostgreSQL中文图书
社区年会PPT资料
关于中文社区
注册
登录
全部
Bug
使用技巧
内容问题
建议
系统安装
集群复制
其他
首页
有问有答(FAQ)
【%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7】
类主题列表
wzf1943
小白请教一个 top 50的问题 ...
... 2019-09-25 07:47:56+08...1楼
### 想请教一个关于如何构造一个 top 50的问题 - 表1 ``` name root type .... file1 1 json file2 2 zip file3 1 zip file4 8 zip file4 1 tar .......... ``` - 表2 ``` repo root repo1 1 repo2 2 ........ ``` 我现在想构造一个 query,这个query 可以返回 表1 拥有file 最多的 top 50个 root 以及每个root所对应的file的数量是多少 和 root对应的 repo的名字是什么。 我自己的实现方法是,先把所有的dinstinct的 root id 存到一个表里, 然后用那个root id 去query file的表 去看每个 root id 都存了多少的files数量,最后再排序。 但是这个方法不是特别的好,感觉效率比较低,并且需要我在服务层去重复ping database。因为对 postgres不是很熟悉,所有想问问大佬谁能够给小弟点拨一番。
我的签名:
doudou586
回复: ...
... 2019-10-02 11:00:47+08...2楼
**我试着写一下SQL,PostgreSQL支持很丰富的SQL特性,应只需要一次数据库查询** ``` select A.root, B.repo, A.filenum from ( select root, count(*) as filenum from 表1 group by root order by count(*) desc limit 50 ) A left join 表2 on A.root=B.root order by A.filenum desc ``` 注意,如你的表1的root与表2的root不是外键关联的话,有可能有些root在表1有用了,但从表2查不出名字,此时结果中名字会显示为null。。。
我的签名:天天要用的管理软件 -- 坎普ERP软件
您还没有登录,请您登录后再发表回复
© 2010 PostgreSQL中文社区