我有一个产品表,可以有多个同名但价格不同的产品,我想只显示每种产品的最便宜的价格。
表格示例:
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查询来获取此信息:
谢谢!
答案 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订单