我有一组数据,我有一堆卖家,但我们有一个卖家的层次结构,我们更喜欢并希望为每种产品选择最好的卖家。
ID |ITEM | price | Seller
===========================
1 |Laptop | 100 | eBay
2 |Laptop | 125 | Amazon
3 |Apple | 5 | Amazon
因此,当我查询笔记本电脑的这些数据时,我希望每个项目都有最畅销的卖家。我对卖家的层次结构是1.易趣2.亚马逊所以实质上它只会返回第一个和第三个记录。
你会怎么做呢?
答案 0 :(得分:0)
你可以使用子查询得到它:
SELECT *
FROM tbl t1
WHERE (t1.id, t1.item, t1.price) IN
(SELECT t2.id, t2.item, t2.price
FROM tbl t2
WHERE t1.id = t2.id
ORDER BY t2.price
LIMIT 1);
答案 1 :(得分:0)
在Oracle,MySQL和SQLite中测试的查询:
select s.* from sellers s
join (select item, min(price) mp from sellers group by item) ms
on s.item = ms.item and s.price = ms.mp
MySQL Fiddle demo,SQLite Fiddle demo
对于Oracle,您可以使用备用查询,它应该更快:
select id, item, price, seller
from ( select s.*, min(price) over (partition by item) min_price from sellers s )
where price = min_price