2017-05-30 32 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