2010-11-16 67 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