当前位置:  开发笔记 > 数据库 > 正文

运行Postgres查询按一个字段分组并按另一个字段排序

如何解决《运行Postgres查询按一个字段分组并按另一个字段排序》经验,为你挑选了1个好方法。

我有一个PostgreSQL表,其中包含以下相关字段:

url
title
created_at

可以有许多行包含相同的URL但标题不同.以下是一些示例行:

www.nytimes.com | The New York Times         | 2016-01-01 00:00:00`
www.wsj.com     | The Wall Street Journal    | 2016-01-03 15:32:13`
www.nytimes.com | The New York Times Online  | 2016-01-06 07:19:08`

我正在尝试获取列出以下字段的输出:

1)url
2)title对应于该唯一created_at
的全部计数的最高值3)titleurl

因此,上面示例的输出行看起来像这样:

www.nytimes.com | The New York Times Online | 2
www.wsj.com     | The Wall Street Journal   | 1

基于我在类似问题上阅读的众多SO帖子,看起来我获得前两个字段(url和最新title)的最佳选择是使用DISTINCT ON:

select distinct on (url) url, title from headlines order by url, created_at desc 

同样,为了获得第一个和第三个字段(url以及所有的字数title),我可以简单地使用GROUP BY:

select url, count(title) from headlines group by url

我无法弄清楚的是如何结合上述方法并获得我想要获得的上述三个值.

(编辑提供更清晰.)



1> Erwin Brands..:

这可以在一个单一的做SELECT一个结合-在桌子上有一个单一的扫描窗函数有DISTINCT ON:

SELECT DISTINCT ON (url)
       url, title, count(*) OVER (PARTITION BY url) AS ct 
FROM   headlines 
ORDER  BY url, created_at DESC NULLS LAST;

SQL小提琴.

相关(详细说明):

在应用LIMIT之前获得结果计数的最佳方法

选择每个GROUP BY组中的第一行?

PostgreSQL:按分钟运行查询的行数

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有