开发者社区> 问答> 正文

想请教一个关于如何构造一个 top 50的问题

想请教一个关于如何构造一个 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不是很熟悉,所有想问问大佬谁能够给小弟点拨一番。

展开
收起
kun坤 2019-11-28 13:45:28 384 0
1 条回答
写回答
取消 提交回答
  • 我试着写一下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。。。

    2019-11-28 13:45:49
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Top 5 mistakes when wriiting a 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载