当根据行计算最大值时,SQL选择具有最大值的行

  • 本文关键字:最大值 选择 SQL 计算 sql mysql5
  • 更新时间 :
  • 英文 :


如果我想为特定列选择具有最大值的行,我可以简单地执行

SELECT * FROM tablename WHERE columnname=(SELECT MAX(columnname) FROM tablename)

我的问题有两方面。首先,如果这个值不是列,而是对行进行操作的存储过程的结果,语法是什么?类似的东西

SELECT * FROM tablename
WHERE CALL procname (???)
   = (SELECT MAX (CALL procname (???) FROM tablename)

如何充实此查询?

其次,在这种天真的形式中,我们对每行调用procname一次以确定MAX(...),然后可能对每行再次调用一次以测试每行是否具有最大值。

如何优化?我猜这可能与临时表有关,但我不知道这个引擎有多聪明,我在心里把它与C风格的循环的性能进行比较,因为循环一次只需要保持一行的值。

假设您在pkcol中有一个数字主键,并且您的计算列colname也是数字列,您可以尝试类似的方法

SELECT
  @proc:=CALL procname(colname) AS dummy1,
  IF(@proc>@val,@id:=pkcol,@id) AS dummy2,
  IF(@proc>@val,@val:=@val,@val) AS dummy3
FROM
  (@id:=0) AS initid,
  (@val:=0) AS initval,
  tablename
;
-- discard query result
SELECT * FROM tablename WHERE pkcol=@id;

这将非常接近你的C结构。

相关内容

  • 没有找到相关文章

最新更新