2016-01-31 45 views
1

我試圖完成的是一個查詢,以檢索前2個採購產品和至少2個採購產品,除了product_id,但必須包括產品已經購買了相同的次數。PostgreSQL:查詢檢索頂部2和底部2行,包括等於

這是我使用

CREATE TABLE Orderlines(
    ORDERLINEID serial NOT NULL, 
    ORDERID integer NOT NULL, 
    PROD_ID integer NOT NULL, 
    QUANTITY text NOT NULL, 
    ORDERDATE date NOT NULL, 
    PRIMARY KEY(ORDERLINEID,ORDERID)  
); 

的桌子,這是半成品的查詢,通過他們已經購買的時間,包括他們的PROD_ID排序的產品。

SELECT PROD_ID, COUNT(*) AS c 
FROM Orderlines 
GROUP BY Orderlines.PROD_ID 
ORDER BY c DESC; 
+1

你不應該存儲'quantity'作爲一個字符值。將它存儲爲一個合適的數字(例如'integer') –

回答

2

一種方法是使用dense_rank()

SELECT PROD_ID, c 
FROM (SELECT PROD_ID, COUNT(*) AS c, 
      DENSE_RANK() OVER (ORDER BY COUNT(*) ASC) as seqnum_asc, 
      DENSE_RANK() OVER (ORDER BY COUNT(*) DESC) as seqnum_desc 
     FROM Orderlines 
     GROUP BY Orderlines.PROD_ID 
    ) o 
WHERE seqnum_asc <= 2 OR 
     seqnum_desc <= 2 
ORDER BY c DESC; 
+0

,它像一個魅力一樣工作,謝謝! – Xenofonos