3

我想知道是否有一种方法可以选择特定字段的值超过同一字段最大值一半的行。

例如,我们有一个包含 3 个字段(id、name、rate)的结果集,其中 rate 是一个别名。如果 max rate 是70这样,则查询应该返回所有行rate > 35(即35的一半70)。

就像是:

SELECT * FROM (A heavy and large select)as r WHERE r.rate > MAX(rate) / 2

请注意,我不知道最大速率是多少,并且想在单个查询中完成。

update
main select 是一个非常繁重的查询,而 rate 是一个别名,因此使用 subquery for max rate 需要再次编写该繁重的查询。

4

4 回答 4

4

它基本上像你说的那样编码:

select * from mytable
where rate > (select max(rate) from mytable) / 2:
于 2013-01-15T13:35:02.027 回答
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 
于 2013-01-15T13:32:52.670 回答
1

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

按 id、name、rate > max(rate)/2 从表组中选择 id、name、rate;

于 2013-01-15T13:47:15.613 回答
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
于 2013-01-15T13:37:26.460 回答