MySQL最便宜的价格查询

时间:2016-02-26 13:55:41

标签: mysql

所以我需要的是获得最便宜的物品价格。可以有n个价格,价格可以是周价格或日价格。我需要最便宜的价格,无论是一天还是一周的价格。我尝试使用以下查询。但我也得到一些NULL行。 其次,如果一天的价格是最便宜的,那么我需要单日价格而不是七的倍数,就像下面的查询一样。

所以下面的数据应该在搜索两个对象时得到这个:

id | oid | price | type (day or week)
-------------------------------------
 2 |  1  | 65    | w
 3 |  2  | 9     | d

我希望这是可以理解的。谢谢你的帮助!

对象表:

id | title
-----------
 1 | Object 1
 2 | Object 2 

价格表:

| oid | price | type (day or week)
----------------------------------
|  1  | 10    | d
|  1  | 65    | w
|  2  | 9     | d
|  2  | 70    | w

我的查询:

SELECT o.id, p.oid, p.price, p.type
FROM objects AS o    
LEFT JOIN prices AS c ON p.oid= o.id
AND p.price = 
(
SELECT MIN(IF(type="w",price, price*7)) FROM prices
WHERE oid= o.id
)  
LEFT JOIN ...
LEFT JOIN ...
WHERE ...
GROUP BY o.id ORDER BY p.price ASC

3 个答案:

答案 0 :(得分:1)

要避免使用NULL行,您应该使用内部联接而不是左联接。

对于你的第二部分,我不太清楚你想做什么。

编辑:尝试此查询:

select p.id, o.id, p.price, p.type
  from price as p
  inner join object as o
    on p.id_object = o.id
  where if (p.type = "w", price, price * 7) <= (
   select min(if(p.type = "w", price, price *7))
   from price
   where id_object = o.id 
  )
  order by p.price asc;

答案 1 :(得分:0)

添加

AND price IS NOT NULL

到第一个SELECT中的A WHERE子句,将删除空值。

答案 2 :(得分:0)

已编辑回答:

SELECT o.id, p.price, p.type
FROM objects AS o    
LEFT JOIN  prices p ON p.oid= o.id
AND IF(p.type="w",p.price, p.price*7) <= 
(
SELECT MIN(IF(p2.type="w",p2.price, p2.price*7)) FROM prices p2
WHERE p2.oid= o.id
)  
....