2014-02-18 114 views
0

命令由計數查詢結果()字段的PostgreSQL的不組我有簡單的數據庫,我的事情我的答案應該是如此簡單,但我無法找到我的答案DB是這樣的:如何通過

----------------- 
name | ip 
----------------- 
nick |192.168.1.10 
john |192.168.1.1 
john |192.168.1.2 
john |192.168.1.3 
lucy |192.168.10.1 
lucy |192.168.10.2 

我需要每名 計數(IP)及以上列表的結果排序的查詢返回的所有行,但結果應該是這樣的:

------------------ 
name |ip 
------------------ 
nick |192.168.1.10 
lucy |192.168.10.1 
lucy |192.168.10.2 
john |192.168.1.1 
john |192.168.1.2 
john |192.168.1.3 
+2

爲什麼不'GROUP BY'? – rendon

回答

1

嘗試此查詢:

SELECT t1.* 
FROM table1 t1 
     INNER JOIN (SELECT Count(name) counter, 
          name 
        FROM table1 
        GROUP BY name)t2 
       ON t1.name = t2.name 
ORDER BY counter; 

SQL Fiddle

+0

它的工作正常,除了我不得不改變一些表和字段名稱除了「名稱」是在pgsql保留關鍵字:)謝謝 – gr8linux

+0

歡迎你,我的朋友,如果這是真正的答案,然後點擊它作爲真正的答案;) – Hamidreza

+0

請修復您的答案(計數()應在IP領域)我檢查它爲真正的答案 – gr8linux

1

這裏一個SQL Fiddle

試試這個聲明。

SELECT * FROM tblSAMPLE ORDER BY name DESC,ip 
+0

我試過你的查詢,但它沒有工作 – gr8linux

0
SELECT NAME,IP, 
     COUNT(NAME) KEEP (DENSE_RANK LAST ORDER BY NAME) 
       OVER (PARTITION BY NAME) "Answer" 
FROM PSQL 
ORDER BY 3 

ANS從 Subash中號

需要告訴正確答案Y/N?

+0

我收到了錯誤:語法錯誤處於或接近「(」在您的查詢 – gr8linux

+0

'keep ...'是Oracle特有的,Postgres不支持 –

0

這應該比表上的自加入更快。

select name, ip 
from (
    select name, 
     ip, 
     count(*) over (partition by name) as cnt 
    from the_table 
) t 
order by cnt;