1

我有一个如下表:

User    Product Price   City    Month       Year
------------------------------------------------
abc     Pen         22  Mumbai  JULY        2019
abc     Pencil      21  Mumbai  AUGUST      2019
abc     Notebook    23  Mumbai  SEPTEMBER   2019
abc     Pen         22  Mumbai  OCTOBER     2019
abc     Pencil      21  Mumbai  NOVEMBER    2019
abc     Notebook    23  Mumbai  DECEMBER    2019
xyz     Pen         22  Mumbai  JULY        2019
xyz     Pencil      21  Mumbai  AUGUST      2019
xyz     Notebook    23  Mumbai  SEPTEMBER   2019
xyz     Pen         22  Mumbai  OCTOBER     2019
xyz     Pencil      21  Mumbai  NOVEMBER    2019
xyz     Notebook    23  Mumbai  DECEMBER    2019

我想从价格最高的表中获取数据。

预期输出:

User    Product     Price   City    Month       Year
----------------------------------------------------
abc     Notebook    23      Mumbai  SEPTEMBER   2019
abc     Notebook    23      Mumbai  DECEMBER    2019
xyz     Notebook    23      Mumbai  SEPTEMBER   2019
xyz     Notebook    23      Mumbai  DECEMBER    2019

我尝试了什么:

查询一:

SELECT * FROM 
(SELECT *, ROW_NUMBER() OVER (partition by "User" ORDER BY "Price" desc) as col
 FROM public.product)x
 WHERE x.col=1

输出:

User    Product     Price   City        Month       Year    col
---------------------------------------------------------------
abc     Notebook    23      Mumbai      SEPTEMBER   2019    1
xyz     Notebook    23      Mumbai      DECEMBER    2019    1

在这里,我缺少 abc 的 12 月数据,xyz 用户也一样

查询 2:

SELECT * FROM 
(SELECT *, ROW_NUMBER() OVER (partition by "User","Price" ORDER BY "Price" desc) as col
 FROM public.product)x
 WHERE x.col=1

输出:

User    Product     Price   City        Month       Year    col
--------------------------------------------------------------
abc     Notebook    23  Mumbai          SEPTEMBER   2019    1
abc     Pen         22  Mumbai          JULY        2019    1
abc     Pencil      21  Mumbai          AUGUST      2019    1
xyz     Notebook    23  Mumbai          DECEMBER    2019    1
xyz     Pen         22  Mumbai          JULY        2019    1
xyz     Pencil      21  Mumbai          NOVEMBER    2019    1

在这里,我得到了每种产品最高价格的行

有人可以帮我获得预期的输出吗?

4

2 回答 2

3

您可以简单地使用子查询和max().

SELECT p1.*
       FROM public.product p1
       WHERE p1."Price" = (SELECT max(p2."Price")
                                  FROM public.product p2);
于 2020-07-26T06:05:51.167 回答
1

采用dense_rank()

演示

SELECT * FROM 
(SELECT *, dense_rank() OVER (ORDER BY Price desc) as col
FROM public.product)x
WHERE x.col=1

输出:

user    product   price city    month       year    col
Xyz     Notebook    23  Mumbai  SEPTEMBER   2019    1
abc     Notebook    23  Mumbai  DECEMBER    2019    1
abc     Notebook    23  Mumbai  SEPTEMBER   2019    1
xyz     Notebook    23  Mumbai  DECEMBER    2019    1
于 2020-07-26T06:03:59.067 回答