2017-05-30 38 views
0
CREATE TABLE test(
id integer, 
content text, 
number integer 
) 

INSERT INTO test(id,content,number) VALUES(1,'a'::text, 5); 
INSERT INTO test(id,content,number) VALUES(2,'b'::text, 2); 
INSERT INTO test(id,content,number) VALUES(3,'c'::text, 2); 
INSERT INTO test(id,content,number) VALUES(4,'d'::text, 3); 
INSERT INTO test(id,content,number) VALUES(5,'e'::text, 1); 
INSERT INTO test(id,content,number) VALUES(6,'f'::text, 3); 
INSERT INTO test(id,content,number) VALUES(7,'g'::text, 3); 
INSERT INTO test(id,content,number) VALUES(8,'h'::text, 2); 
INSERT INTO test(id,content,number) VALUES(9,'i'::text, 4); 

我想要的是,将数字列和排序结果分组为id列作为desc,像这样;无法顺序结果时正确分组

| id | number 
---------------- 
| 9 | 4 
| 8 | 2 
| 7 | 3 
| 5 | 1 

这里有多个外观像2,​​3和1的所有号码进行分组,看到只有一次,还下令用id柱递减。

我试过这个查询,但它不适合我;

SELECT DISTINCT ON (number) number, id FROM test ORDER BY number,id DESC LIMIT 4 

回答

1

使用派生表:

SELECT id, number 
FROM (
    SELECT DISTINCT ON (number) number, id 
    FROM test 
    ORDER BY number, id DESC 
    ) s 
ORDER BY id DESC 
LIMIT 4; 

id | number 
----+-------- 
    9 |  4 
    8 |  2 
    7 |  3 
    5 |  1 
(4 rows) 
+0

酷.......感谢 – sommeguyy

1

你还可以:

select max(id) as id, number 
from test 
group by number 
order by id desc 
limit 4 
+0

好,谢谢..,这是在以下方面更好性能? – sommeguyy

+0

刚刚测试过好奇心。好吧,没有任何索引,如果你有很多记录(对于小桌面你并没有感觉不同),这应该在性能方面更好。如果使用适当的索引(例如:'... on test(number,id DESC)'),那么对于少于1000万条记录(10万条记录非常接近数字),性能可能几乎相同。对于更多的行,这应该表现更好。 –

+0

我看到了......再次感谢:) – sommeguyy