仅提取最便宜的价格?

时间:2010-11-16 21:39:19

标签: sql mysql aggregate-functions

我有一个产品表,可以有多个同名但价格不同的产品,我想只显示每种产品的最便宜的价格。

表格示例:

TABLE: Products(name,price)
---------------------------
Banana -- 1,25
Banana -- 1,10
Strawberry -- 2,43
Apple -- 1,11
Apple -- 4,12
Apple -- // Some Products Can Have the Price Column Empty!!

我想要MySQL查询来获取此信息:

  • Banana来自:$ 1,10
  • 草莓来自:$ 2,43
  • Apple From:$ 1,11

谢谢!

3 个答案:

答案 0 :(得分:4)

脱离我的头顶,像是

按名称从产品组中选择名称,分钟(价格);

有关详细信息,请参阅此链接。 http://www.techonthenet.com/sql/group_by.php

然后使用PHP显示您想要的数据,例如在表等。

另外,您还没有说明价格字段是否为NULL。 您还没有说过您的名字字段是否可以包含“香蕉”或“香蕉”等类似的混合情况。如果是这样,那么你可能想在名称字段上调用UPPER(TRIM(名称))或类似的东西来规范它。

答案 1 :(得分:1)

使用:

  SELECT p.name,
         MIN(REPLACE(p.price, ',', '')) AS minprice
    FROM PRODUCTS p
GROUP BY p.name

在尝试获取最低数值时,将价格存储为字符串可能会导致不必要的悲伤,因此我使用REPLACE函数去除字符。但这假设所有价值都与美分有关。

如果最低值为NULL,则聚合函数MIN(和MAX)将返回NULL。如果您希望这些显示为零:

  SELECT p.name,
         COALESCE(MIN(REPLACE(p.price, ',', '')), 0) AS minprice
    FROM PRODUCTS p
GROUP BY p.name

这就是为什么你不应该存储格式 - 将它应用于表示层,这样你就可以容纳其他格式。

答案 2 :(得分:0)

从价格<>的产品中选择不同的名称,价格按价格desc的NULL订单