有没有办法使查询遵循SQL中的层次结构?

时间:2016-02-19 03:15:06

标签: mysql sql oracle sqlite amazon-web-services

我有一组数据,我有一堆卖家,但我们有一个卖家的层次结构,我们更喜欢并希望为每种产品选择最好的卖家。

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

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

你会怎么做呢?

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 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