Postgresql 子查询

标签 postgresql subquery

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

类似这样的东西

| 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 |

最佳答案

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

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

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

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

关于Postgresql 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46627714/

相关文章:

sql - 如果丢失,PostgreSQL 使用前一行的值

mysql - 如何在 MySQL 中按日期对相关结果进行分组和排序

PostgreSQL:使用 LIKE 过滤掉以 'K' 开头的姓氏

Python/PostgreSQL - 如何使用 psycopg2 库将一个表复制到另一个表?

arrays - 根据条件和数组元素位置循环遍历 postgresql 表返回中的数组

sql - PostgreSQL:在一个语句中组合重复窗口函数(OVER/PARTITION BY)

python - 在 SQLAlchemy 中按空值过滤 postgres JSON 列

mysql - (MS Access MySQL) FROM 带别名的子查询

php - 模型中 1 个函数中的多个 MySQL 查询

mysql - 如何为每个组选择第一行(按日期时间排序)?