Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-限制组bys_Sql_Mysql_Group By - Fatal编程技术网

MySQL-限制组bys

MySQL-限制组bys,sql,mysql,group-by,Sql,Mysql,Group By,想象一下,你有一张桌子,上面摆满了产品。每种产品都有一个价格,属于一个特定的类别。此外,每个产品也属于一个子类别。现在,如果您想为每个子类别找到最便宜的产品,该怎么办?这很简单: SELECT MIN(price), sub_category FROM products GROUP BY sub_category 对吧? 现在,假设您只想为上述结果的每个类别(而不是子类别)显示最多2个产品。有没有办法在SQL中实现这一点?假设产品具有唯一的id,您可以尝试以下方法: select * from

想象一下,你有一张桌子,上面摆满了产品。每种产品都有一个价格,属于一个特定的类别。此外,每个产品也属于一个子类别。现在,如果您想为每个子类别找到最便宜的产品,该怎么办?这很简单:

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

为什么不使用服务器脚本限制/限制结果?这是一个解决方案。但是如果有很多行,最好在SQL server上这样做,并且只传输相关的行。您的查询是错误的,它只会产生一个结果,因为您没有将sub_category字段添加到select子句中。我认为这可能会从一个子类别返回两个产品,并且只会从该类别的主查询中得到一个结果。作者想从不同的子类别中得到2个。不过我可能错了。您可以在子查询中按子类别分组,希望这样做。-1与问题中相同的问题,此查询只返回一个结果。@Yasen Zhelev:子查询不需要分组。最终,你想从一个没有子类别的类别中获得最多2种最便宜的产品。那他为什么不直接购买呢。循环浏览类别,获得2种最便宜的产品。或者他想在一个查询中完成它?@Yasen Zhelev:是的,我认为关键是用一个查询来获得它们。