我的Oracle DB上有2个表
一个有产品清单
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_list表,但按订单表中最常用的Product_id排序。因此,在这种情况下,产品ID = 2必须首先在列表中。
我找到了一些例子,但我找不到适合这种情况的东西。
答案 0 :(得分:1)
您可以使用子查询在订单表上进行汇总,以查找每个产品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;
答案 1 :(得分:1)
SELECT PL.Product_ID, PL.Product_Name, PL.Product_Price, count(O.Product_ID) cnt
FROM Product_List
LEFT JOIN Orders O
on O.Product_ID = PL.Product_ID
GROUP BY PL.Product_ID, PL.Product_Name, PL.Product_Price
ORDER BY cnt Desc