2016-02-19 37 views
0

我有一组数据,我有一堆卖家,但是我们有一个卖家的层次结构,我们更愿意为每个产品选择最好的卖家。有没有办法让查询在SQL中遵循一个层次结构?

ID |ITEM | price | Seller 
=========================== 
1 |Laptop | 100  | eBay 
2 |Laptop | 125  | Amazon 
3 |Apple | 5  | Amazon 

因此,当我为笔记本电脑查询这些数据时,我希望每个项目都有可用的最高卖家。我对卖家的层次结构是1. ebay 2.亚马逊本质上它只会返回第一个和第三个记录。

你会怎么做呢?

回答

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); 
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 demoSQLite 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 
相关问题