【发布时间】:2012-11-01 16:04:02
【问题描述】:
我想从 MySQL 中特定字段具有最小值的表中选择数据,我试过这个:
SELECT * FROM pieces WHERE MIN(price)
请帮忙?
【问题讨论】:
-
这个问题可以有多种解释,你能给出带有结果的示例记录吗?
标签: mysql sql aggregate-functions greatest-n-per-group
我想从 MySQL 中特定字段具有最小值的表中选择数据,我试过这个:
SELECT * FROM pieces WHERE MIN(price)
请帮忙?
【问题讨论】:
标签: mysql sql aggregate-functions greatest-n-per-group
这将为您提供所有记录中价格最低的结果。
SELECT *
FROM pieces
WHERE price = ( SELECT MIN(price) FROM pieces )
【讨论】:
假设我理解了这个问题,我会这样做。
SELECT * FROM pieces ORDER BY price ASC LIMIT 1
如果您尝试选择多行,其中每行可能具有相同的最低价格,那么@JohnWoo 的回答就足够了。
基本上,我们只是按价格升序 (ASC) 对结果进行排序,然后取结果的第一行。
【讨论】:
这也有效:
SELECT
pieces.*
FROM
pieces inner join (select min(price) as minprice from pieces) mn
on pieces.price = mn.minprice
(由于此版本没有子查询的 where 条件,如果您需要 UPDATE 表可以使用它,但如果您只需要 SELECT 我建议使用 John Woo 解决方案)
【讨论】:
使用 HAVING MIN(...)
类似:
SELECT MIN(price) AS price, pricegroup
FROM articles_prices
WHERE articleID=10
GROUP BY pricegroup
HAVING MIN(price) > 0;
【讨论】:
高效方式(任意数量的记录):
SELECT id, name, MIN(price) FROM (select * from table order by price) as t group by id
【讨论】:
其实,要看你想得到什么: - 只是最小值:
SELECT MIN(price) FROM pieces
具有最小值的表(多行):正如 John Woo 上面所说的那样。
但是,如果可以是具有相同最小值的不同行,最好是从另一列中对它们进行排序,因为之后或之后您将需要这样做(从 John Woo 开始回答):
SELECT * FROM 件 WHERE 价格 = ( SELECT MIN(price) FROM pieces) 按库存 ASC 订购
【讨论】:
为了更简单
SELECT *,MIN(price) FROM prod LIMIT 1
【讨论】:
GROUP BY 子句的情况下运行这样的查询。