我试图完成的是一个查询,检索前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;

10-07 14:15
查看更多