想象一下,您已经有了一张包含产品的表格。每个产品都有一个价格,属于一个特定的类别。此外,每个产品也属于一个子类别。现在,如果你想为每个子类别找到最便宜的产品呢?这很容易:MySQL - 限定组byby
SELECT MIN(price), sub_category FROM products GROUP BY sub_category
对不对?
现在,想象一下,您只想为每个类别(而不是子类别)显示上述结果的最多2种产品。有没有办法在SQL中实现这一点?
想象一下,您已经有了一张包含产品的表格。每个产品都有一个价格,属于一个特定的类别。此外,每个产品也属于一个子类别。现在,如果你想为每个子类别找到最便宜的产品呢?这很容易:MySQL - 限定组byby
SELECT MIN(price), sub_category FROM products GROUP BY sub_category
对不对?
现在,想象一下,您只想为每个类别(而不是子类别)显示上述结果的最多2种产品。有没有办法在SQL中实现这一点?
假设产品有一个唯一的ID,你可以试试这个:
select * from products p
where p.id in (select p1.id from products p1
where p.category = p1.category order by price limit 0,2)
and price = (select min(price) from products p2
where p2.sub_category = p.sub_category)
编辑:@wimvds:感谢您指出的错误。
编辑2:我想这是错误的,如果有多个产品在一个子类别中的最低价格。
它不应该是这样的:
select * from products p, products p1 where p.id in (select min(price) from products p2 where p2.sub_category = p2.sub_category) and p1.category=p.category order by p.price limit 0,2
你为什么不限制/限制与服务器脚本的结果呢? – 2011-02-02 09:32:12
这是一个解决方案。但是,如果有很多行,最好在SQL服务器上执行此操作,并只传输相关的行。 – quano 2011-02-02 09:33:42