我试图完成的是一个查询,检索前2个购买的产品和最少2个购买的产品以及产品id,但必须包括购买了相同次数的产品。
这是我用的桌子
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)
);
这是一个半成品查询,它根据购买产品的时间(包括产品id)对产品进行排序。
SELECT PROD_ID, COUNT(*) AS c
FROM Orderlines
GROUP BY Orderlines.PROD_ID
ORDER BY c DESC;
最佳答案
一种方法是使用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;