我需要一些关于子查询的帮助。 我想在第一列中分组,然后在第二列中进行子分组和排序,选择 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/