Oracle-按最频繁的条目分组
我的Oracle数据库上有两个表 有产品清单的人Oracle-按最频繁的条目分组,oracle,Oracle,我的Oracle数据库上有两个表 有产品清单的人 PRODUCT_ID - PRODUCT_NAME - PRODUCT_PRICE 1 P_1 50 2 P_2 60 3 P_3 70 4 P_4 80 还有一个带着命令 CLIENT_ID - PRODUCT_ID -
PRODUCT_ID - PRODUCT_NAME - PRODUCT_PRICE
1 P_1 50
2 P_2 60
3 P_3 70
4 P_4 80
还有一个带着命令
CLIENT_ID - PRODUCT_ID - ORDER_PRICE
1 1 50
2 3 60
3 2 70
4 2 70
我需要进行查询,以便它返回product_列表表,但按orders表中最常见的product_id排序。因此,在这种情况下,产品ID=2必须位于列表的第一位
我找到了一些示例,但我找不到适用于这种情况的方法。您可以在orders表上使用subquery for aggregation来查找每个产品id的计数,然后将其与product_list表左键连接,以使用计算出的计数进行订购
select p.*
from product_list p
left join (
select product_id,
count(*) as cnt
from orders
group by product_id
) o on p.product_id = o.product_id
order by o.cnt desc nulls last;
您可以使用orders表上聚合的子查询来查找每个产品id的计数,然后将其与product_列表表左键联接,以使用计算出的计数进行排序
select p.*
from product_list p
left join (
select product_id,
count(*) as cnt
from orders
group by product_id
) o on p.product_id = o.product_id
order by o.cnt desc nulls last;
- 之所以使用左联接,是因为并非所有产品都有订单,我们需要找到每个产品的订单数量
- 之所以使用GROUP BY,是因为我们使用aggregate count()来查找给定产品订单的出现情况
- 使用ORDER BY DESC,以便将计数从产品订单的最高计数先到最低进行排序。但是,当存在联系时,我们不知道将返回什么订单,因为未定义订单的第二级。可能是订单,我们可以添加一个产品ID,以便在之后从低到高
- 之所以使用左联接,是因为并非所有产品都有订单,我们需要找到每个产品的订单数量
- 之所以使用GROUP BY,是因为我们使用aggregate count()来查找给定产品订单的出现情况
- 使用ORDER BY DESC,以便将计数从产品订单的最高计数先到最低进行排序。但是,当存在联系时,我们不知道将返回什么订单,因为未定义订单的第二级。可能是订单,我们可以添加一个产品ID,以便在之后从低到高