2010-11-16 54 views
1

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

示例表:

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查询得到这个:

  • 香蕉来源:$ 1,10
  • 草莓来源:$ 2.43
  • 苹果公司:1,114美元

谢谢!

回答

4

关闭我的头顶,像

选择名称,分(价格)从产品组的名字;

查看此链接了解更多信息。 http://www.techonthenet.com/sql/group_by.php

然后使用PHP显示数据,但是您希望例如在一张桌子等

此外,你还没有说价格字段是否可以是NULL。 你还没有说过你的名字字段是否可以混合使用“香蕉”或“香蕉”或类似字词。如果是这样,那么你可能会想要调用UPPER(TRIM(name))或类似的名称字段来正常化它。

+0

这是否忽略价格栏中没有价值的产品? – Ryan 2010-11-16 21:43:16

0

选择不同的名称,从产品价格,其中价格<> NULL按价格排序倒序

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 

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

+0

我认为价格像0,67一样会被视为67? – Ryan 2010-11-16 21:50:50

+0

@大卫:只要每个值都有美分相关,那就没问题。 IE浏览器; 1,00将是100 ... – 2010-11-16 21:51:48

+0

Min在文本字段上工作吗? – Matt 2010-11-16 22:01:13