问题陈述
如何高效地检索最高/最低的记录或由另一个组定义的每个组中特定字段的最低值字段?
使用左外连接的解决方案
要检索每个 GroupId 中 OrderField 字段具有最高值的记录,请使用以下查询:
SELECT t1.* FROM `Table` AS t1 LEFT OUTER JOIN `Table` AS t2 ON t1.GroupId = t2.GroupId AND t1.OrderField < t2.OrderField WHERE t2.GroupId IS NULL ORDER BY t1.OrderField;
加入的好处方法
替代方案
如果数据很小或者您正在使用的数据库引擎的特定实现对于连接优化不佳,您可以考虑诸如as:
使用@Rank的方法效率低下变量
您使用 @Rank 变量描述的方法(如最初编写的那样)将无法正常工作,因为 @Rank 变量在处理第一个表后不会重置为零。要解决此问题,您需要添加另一个派生表,以在处理第二个表之前将 @Rank 重置为零。然而,与 join 方法相比,这种方法仍然效率低下。
以上是如何高效地检索数据库中每组的最高或最低记录?的详细内容。更多信息请关注PHP中文网其他相关文章!