【发布时间】:2013-11-07 05:24:27
【问题描述】:
我在构建使用以下条件的查询时遇到了一些麻烦:
- 与组织匹配
- 按分数 (desc) 排序,然后按句柄 (asc) 排序
- 按类型分组
所以这个查询是我的出发点:
select * from social_media_handles where org = '00000001' order by score desc, handle asc;
这将为我提供以下数据......然后我需要按类型分组,所以我只提取最匹配的 social_media_handles。
org | handle | url | type | score | dataset_date
----------+---------------------------------------------------------------+-----------------------------------------+----------+-----------------+--------------
00000001 | boathousesw15 | http://www.boathouseputney.co.uk | twitter | 500111972000056 | 2013-10-15
00000001 | aspall | http://www.boathouseputney.co.uk | twitter | 500111972000018 | 2013-10-15
00000001 | nathansloane | http://www.boathouseputney.co.uk | twitter | 500111972000018 | 2013-10-15
00000001 | youngspubs | http://www.boathouseputney.co.uk | twitter | 500111972000018 | 2013-10-15
00000001 | pages/the-boathouse-putney/153429008029137 | http://www.boathouseputney.co.uk | facebook | 500111972000011 | 2013-10-15
00000001 | putneysocial | http://www.boathouseputney.co.uk | twitter | 500111972000009 | 2013-10-15
00000001 | theexchangesw15 | http://www.boathouseputney.co.uk | twitter | 500111972000009 | 2013-10-15
00000001 | youngspubs | http://www.youngshotels.co.uk | twitter | 500111970000016 | 2013-10-15
预期输出
org | handle | url | type | score | dataset_date
----------+---------------------------------------------------------------+-----------------------------------------+----------+-----------------+--------------
00000001 | boathousesw15 | http://www.boathouseputney.co.uk | twitter | 500111972000056 | 2013-10-15
00000001 | pages/the-boathouse-putney/153429008029137 | http://www.boathouseputney.co.uk | facebook | 500111972000011 | 2013-10-15
我尝试过group by、distinct 和子查询,但运气不佳。这个问题有规律吗?
我正在使用 Postgres,并通过 distinct on 解决了这个问题,但我正在寻找与不同供应商兼容的版本。
【问题讨论】:
-
我不明白我们如何定义
top matched social_media_handles!?!?! -
@Strawberry,在
score列中每个type中具有最高值的那些。 -
啊哈,假设 Roman Pekar 的第二个解决方案适用于 postgres(稍作修正),那么我猜这将是最快的。
-
@Strawberry 我认为这取决于,如果您有 10000 条 type = 'facebook' 的记录并且您有适当的索引,那么第一个会更快
-
好的 - 我不知道 postgres 所以我不能真正评论那种答案。
标签: sql postgresql group-by greatest-n-per-group