【发布时间】:2021-04-10 13:51:37
【问题描述】:
我需要编写一个 Oracle SQL 查询。我有两个表产品和消息。产品表如下所示:
| product_id | creation_date | user_id | category_id |
|---|---|---|---|
| p1 | 2017-03-01 | u1 | c1 |
| p2 | 2018-05-23 | u1 | c3 |
| p3 | 2019-06-21 | u2 | c1 |
消息表如下所示:
| message_id | creation_date | product_id | user_from |
|---|---|---|---|
| m1 | 2018-03-01 | p1 | u2 |
| m2 | 2019-08-19 | p1 | u5 |
| m3 | 2020-10-10 | p3 | u7 |
我想列出一个类别中的所有产品,按消息总数排序,以及每个产品的前 5 位买家(联系这些产品的用户按发送消息总数排序)
示例输出表:
| category_id | product_id | total_messages_for_product | user_id | messages |
|---|---|---|---|---|
| c1 | p1 | 200 | u1 | 10 |
| c1 | p1 | 200 | u2 | 9 |
| c1 | p1 | 200 | u3 | 7 |
| c1 | p1 | 200 | u4 | 5 |
| c1 | p1 | 200 | u5 | 4 |
| c1 | p2 | 150 | u7 | 11 |
| c1 | p2 | 150 | u8 | 10 |
| c1 | p2 | 150 | u9 | 9 |
| c1 | p2 | 150 | u10 | 7 |
| c1 | p2 | 150 | u4 | 6 |
【问题讨论】:
-
那么,你尝试了什么?
-
您现有的输入数据没有意义。为什么
products表中有user_id列? -
我知道如何使用内部连接获取 category_id、product_id 和 group by sum 消息,但我不知道如何获取最后两列 @Russ
-
@mathguy 该产品是由某个用户创建的,但是此 user_id 与显示发送消息的用户的消息 user_from 列不同。希望它澄清
-
但是,我只是在猜测,您希望在输出(来自第二个表)中出现
user_from,而不是user_id。对吗?
标签: sql oracle greatest-n-per-group