2011-03-08 38 views
2

我想选择每种产品类型的最便宜(包括运费,并将价格转换为当地货币)。最便宜=(product.price + product.shipping)* seller.to_aud获取每种货币兑换产品类型的最低价格

我的数据库有表如下:

PRODUCTS           SELLERS 
----------------------------------------------- -------------------------- 
| id | type_id | seller_id | price | shipping | | id | currency | to_aud | 
----------------------------------------------- -------------------------- 
| 1 | 1  | 1   | 10 | 5  | | 1 | usd  | 0.9875 | 
----------------------------------------------- -------------------------- 
| 2 | 1  | 2   | 10 | 2  | | 2 | gbp  | 1.6000 | 
----------------------------------------------- -------------------------- 
| 3 | 1  | 1   | 13 | 0  | 
----------------------------------------------- 
| 4 | 2  | 1   | 8  | 4  | 
----------------------------------------------- 
| 5 | 2  | 2   | 8  | 2  | 
----------------------------------------------- 
| 6 | 2  | 2   | 15 | 0  | 
----------------------------------------------- 

如果所有的卖家使用单一货币,我并没有增加成本我可以得到我想要的结果:

SELECT a.id, a.price 
FROM 
(
SELECT type_id, min(price) as minprice 
FROM products 
GROUP BY type_id 
) AS b INNER JOIN products as a on a.type_id = b.type_id and a.price = b.minprice 
ORDER BY price 

但我不知道该从哪里出发。任何帮助将不胜感激。

回答

1
SELECT a.id, a.price*ISNULL(s.to_aud,1) as minprice 
FROM 
(
SELECT type_id, min((price+shipping)) as minprice 
FROM products 
GROUP BY type_id 
) AS b INNER JOIN products as a on a.type_id = b.type_id and (a.price+a.shipping) = b.minprice 
Inner join sellers s on s.id = a.seller_id 
ORDER BY price 
+0

啊太棒了!这完美的作品!虽然,我确实将'a.price * ISNULL(s.to_aud,1)'调整为'ROUND((a.price + a.shipping)* s.to_aud,2)'感谢您的时间。 – pocketrocket 2011-03-08 14:02:01