选择具有特定字段值大于相同字段最大值一半的行。

3
我想知道是否有一种方法可以选择特定字段的值大于该字段最大值一半的行。
例如,我们有一个包含3个字段(id、name、rate)的结果集,其中rate是一个别名。如果最大的rate为70,则查询应该返回所有rate > 35的行(即3570的一半)。
类似这样的语句:
SELECT * FROM (A heavy and large select)as r WHERE r.rate > MAX(rate) / 2

请注意,我不知道最大速率是什么,并希望在一次查询中完成。
更新: 主查询是一个非常耗费资源的查询,rate是一个别名,因此需要使用子查询来获取最大速率,但需要再次编写那个耗费资源的查询。
4个回答

4

这其实就是按照您说的那样编码:

select * from mytable
where rate > (select max(rate) from mytable) / 2:

这实际上完成了工作,但似乎我提出的问题太简单了。让我编辑一下它。 - Omid

2
with cts as 
(select max(rate) as maxRate
from tableName 
)
select *
from tableName a join cts b 
on a.rate > maxRate/2

尚未测试,但应该能够正常工作

而对于MySQL

select *
from tableName a join (select max(rate) as maxRate from tableName) b 
on a.rate > b.maxRate/2 

哦,我没注意到它是MySQL,我的错,抱歉;/ - WKordos
我的朋友们,看来我问的问题太简单了。所以我编辑了问题。 - Omid

1

我认为这个未经测试的代码可能有效,

选择 id、name、rate 从 table 分组 by id、name、rate 有 rate > max(rate)/2;


似乎是解决问题的起点,查询已执行但只返回了1行。需要改进一些东西。 - Omid
1
这样做不起作用。having 子句中的 rate 是来自一行的任意值。 - Gordon Linoff

0
SELECT * 
FROM table a
 INNER JOIN 
   (SELECT 
      id
      ,MAX(rate) / 2 AS max_rate 
    FROM table
    GROUP BY id) b ON a.id = b.id
WHERE rate > max_rate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接