Mysql 为db-sql的每一行查找最低值

Mysql 为db-sql的每一行查找最低值,mysql,sql,Mysql,Sql,我得到了一张价格信息表,如下图所示,我正在尝试查询数据库,以返回“项目”和最便宜的供应商价值 所以下表是 自行车,供应商3-120.43 鞋,供应商2-19.99 球,供应商1-5.50 这是否可能与sql查询有关,或者您是否需要输出所有值,然后使用php(或所选语言)对其进行过滤 更改您的模式 表供应商 supplier_id supplier_name 1 Supplier 1 2 Supplier 2 3

我得到了一张价格信息表,如下图所示,我正在尝试查询数据库,以返回“项目”和最便宜的供应商价值

所以下表是

  • 自行车,供应商3-120.43
  • 鞋,供应商2-19.99
  • 球,供应商1-5.50
这是否可能与sql查询有关,或者您是否需要输出所有值,然后使用php(或所选语言)对其进行过滤

更改您的模式

供应商

supplier_id    supplier_name
1              Supplier 1
2              Supplier 2
3              Supplier 3
产品

product_id     product_name
1              Bike
2              Shoe
3              Ball
价格

product_id     supplier_id     price
1              1               125.65
1              2               132.01
1              3               120.43
2              1               23.99
2              2               19.99
2              3               25.96
3              1               5.50
3              2               8.65
3              3               6.50
你的问题

SELECT product_name, supplier_name, price
FROM prices
INNER JOIN products ON products.product_id = prices.product_id
INNER JOIN suppliers ON suppliers.supplier_id = prices.supplier_id
GROUP BY prices.product_id
HAVING price = MIN(prices.price)

这是一个做你想做的事情的糟糕模式。如果有一千个供应商呢?正如Wallyk提到的,这不是一个好的模式设计。将供应商分组到另一个表。然后你有一个产品表。您有一个定价表,其中包含产品和供应商的外键SQLite是否支持LEAST()?可能有一个等价的,只是名称不同而已。但是我找不到。
SELECT product_name, supplier_name, price
FROM prices
INNER JOIN products ON products.product_id = prices.product_id
INNER JOIN suppliers ON suppliers.supplier_id = prices.supplier_id
GROUP BY prices.product_id
HAVING price = MIN(prices.price)