postgresql - 选择分组依据之外的列
问题描述
我希望按每个 ID 选择第一次和最后一次点击,以及相应的来源。这是一个示例表:
ID Click Source
--------------------------
1 1 Google
1 2 Facebook
1 3 Yahoo
2 1 Google
2 2 Yahoo
3 1 Facebook
4 1 Yahoo
5 1 Pinterest
5 2 Google
这是期望的结果:
ID First Last
-------------------------
1 Google Yahoo
2 Google Yahoo
3 Facebook Facebook
4 Yahoo Yahoo
5 Pinterest Google
我已经通过在 where 子句中简单地设置 click=1 来获得第一次点击。如果不按 ID 和来源分组,我无法获得 MAX(点击)。当我将 Source 包含在 group by 中时,我没有得到我想要的结果。
解决方案
DISTINCT ON
您可以使用公共 ID连接两个派生表,以获取每个 ID 的第一次和最后一次点击。
SELECT f.id,
f.source "first",
s.source "last"
FROM (SELECT DISTINCT ON (id)
id,
source
FROM elbat
ORDER BY id ASC,
click ASC) f
INNER JOIN (SELECT DISTINCT ON (id)
id,
source
FROM elbat
ORDER BY id ASC,
click DESC) s
ON s.id = f.id;
推荐阅读
- unix - 如何归档配置单元表?
- c# - Wpf RichTextBox 将键更改为换行符;
- android - 信标通知是否可以唤醒已终止的应用程序
- ios - How to populate Dynamic UITableview Inside dynamic UITableviewCell in swift?
- c++ - Just default values for a struct, or is this doing something else?
- flutter - 我们可以将创建的 Stateful 小部件传递给另一个 dart 文件并将该小部件与 setState 一起添加为 body 吗?
- python - AWS Postgres 使用 SQLALchemy 插入比本地 SQLite 慢 1000 倍以上
- asp.net - 如何将模型的多个实例以表单形式传递给控制器
- c# - ASP.NET 如何报告 UploadProgress?
- eclipse - 在 Eclipse 搜索结果中只展开一层