首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PostgreSQL子查询

PostgreSQL子查询
EN

Stack Overflow用户
提问于 2017-10-08 13:08:13
回答 2查看 80关注 0票数 1

我需要一些对子查询的帮助。我想在第一列中按分组,然后在第二列上进行子组和排序,选择MIN,在第三列上排序,然后从第四列中选择与MIN关联的值。

像这样的东西

代码语言:javascript
代码运行次数:0
运行
复制
| subject | id | num | code |
|---------|----|-----|------|
| 2       | 34 | 45  | 1234 |
| 2       | 34 | 3   | 1267 |
| 3       | 23 | 32  | 2345 |
| 3       | 23 | 16  | 4568 |
| 3       | 30 | 12  | 5678 |
| 5       | 29 | 53  | 2354 |


| subject | id | num | code |
|---------|----|-----|------|
| 2       | 34 | 3   | 1267 |
| 3       | 23 | 16  | 4568 |
| 5       | 29 | 53  | 2345 |
EN

回答 2

Stack Overflow用户

发布于 2017-10-08 14:46:06

一种可能的方法是使用LATERAL subquery和ORDER BY xxx LIMIT 1

现场演示:http://sqlfiddle.com/#!17/71480/6

代码语言:javascript
代码运行次数:0
运行
复制
SELECT y.*
FROM (
   SELECT distinct subject
   FROM table1
) x,
LATERAL (
  SELECT * FROM table1 t
  WHERE t.subject = x.subject
  ORDER BY id, num
  LIMIT 1
) y
order by 1

代码语言:javascript
代码运行次数:0
运行
复制
| subject | id | num | code |
|---------|----|-----|------|
|       2 | 34 |   3 | 1267 |
|       3 | 23 |  16 | 4568 |
|       5 | 29 |  53 | 2354 |
票数 0
EN

Stack Overflow用户

发布于 2017-10-08 18:41:14

查找具有最小(最大)值的行相当于查找不存在具有较低(较高)值的行:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT * 
FROM ztable zt
WHERE NOT EXISTS(
        SELECT * FROM ztable nx
        WHERE nx.subject = zt.subject
        AND nx.num < zt.num
        AND nx.id < zt.id
        );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46627714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档