假设我有一个包含3列的表格 - 字母和数字以及像这样的asci
1 a !
1 a ?
2 a ^
3 b *
5 a $
7 a &
我想创建一个查询,以便它首先按字母顺序排序,然后按顺序排序
所以结果将是(不同的数字,按字母排序,然后是id,然后是asci。在这种情况下! < ?
)
1 a !
2 a ^
5 a $
7 a &
3 b *
select distinct on(number),letter, ascii
from table
order by letter, number, ascii
所以这不会在数字上有所区别。但是PG要求不同的列在顺序中看起来是相同的。
如何做到这一点?
答案 0 :(得分:0)
你不能ORDER
任何 ......&#34;明显地。&#34;
ORDER BY
有义务对呈现给它的每条记录进行排序。因此,如果您希望返回的数据集中的值为DISTINCT
,则只需指定:
SELECT DISTINCT number, letter
FROM table
ORDER BY letter, number
您可以包含ORDER BY
子句。返回的行集是否已排序,将为DISTINCT
。
答案 1 :(得分:0)
我有一个解决方案,首先找到给定数字的第一个字母,然后找到该字母的第一个标点。对于严重大小的表,您需要添加一个数字,字母索引作为最小值。
select t.number,t.letter,min(t.ascii) from
(select number, min(letter) as first_letter from t group by number) x
inner join t on x.number = t.number and x.first_letter = t.letter
group by t.number, t.letter
order by 2,1;
小提琴:http://sqlfiddle.com/#!15/7617f/1
或者你可以使用窗口函数来完成它。
select t.number,
min(t.letter),
first_value(min(t.ascii)) over (partition by t.number, min(t.letter)) from t
group by t.number
order by 2,1;