我有一个查询如下:
select date_trunc('day', ordertimestamp) as days
, product
, revenue
from table
结果是:
days | product | revenue
2022-07-10 | shoes | $ 430
2022-07-10 | chocolate | $ 10
2022-07-10 | shirts | $ 3.25
2022-07-10 | phones | $ 500
2022-01-02 | vests | $ 200
2022-02-03 | computers | $ 700
我需要以这样的方式放置此表,即按2022-07-10的收入排名前3位的产品类别出现在一行中,如下所示:
2022-07-10 | phones, shoes, chocolate
正如你所看到的,它们是按收入降序排列的
我试过这样的方法:
SELECT
array(select products from dataset order by revenue desc limit 3) as top_three_product_categories_by_revenue
FROM table
但我不确定它是否准确
3条答案
按热度按时间3okqufwl1#
row_number()
函数按组和顺序为每行分配数字。rn<3
,每个日期仅获得3个顶级产品。Demo here
ryevplcw2#
这段代码可以在DuckDB上运行,但也可以很容易地移植到其他数据库。
w7t8yxp53#
正如其他人在此期间发布的那样:
ROW_NUMBER()
,按日期列划分ORDER BY revenue DESC
,然后按结果行数小于4进行过滤,按日期和product
的STRING_AGG()
进行分组。