SQL在第一个找到的项目上返回优先级不同的记录

时间:2015-08-24 18:36:48

标签: postgresql

表:

 id | tag | pk
----+-----+----
  1 | 111 |  1
  2 | 111 |  2
  2 | 112 |  3
  3 | 111 |  4
  4 | 333 |  5
  4 | 334 |  6
  4 | 111 |  7
  5 | 335 |  8
... for 1,000,000 rows

期望的输出

 id | tag | pk
----+-----+----
  1 | 111 |  1
  2 | 111 |  2
  3 | 111 |  4
  4 | 111 |  7
  5 | 335 |  8
... for limit of 500 rows

我想返回不同的id,但我想首先返回tag = 111的行作为distinct;否则,第一个发现会做。我还想将输出限制为500行。

我看了工会,相交......然而,却无法产生所需的结果。

1 个答案:

答案 0 :(得分:1)

95877子句中使用CASE语句:

ORDER BY
SELECT * FROM t;
┌────┬─────┬────┐
│ id │ tag │ pk │
├────┼─────┼────┤
│  1 │ 111 │  1 │
│  2 │ 111 │  2 │
│  2 │ 112 │  3 │
│  3 │ 111 │  4 │
│  4 │ 333 │  5 │
│  4 │ 334 │  6 │
│  4 │ 111 │  7 │
│  5 │ 335 │  8 │
└────┴─────┴────┘
(8 rows)