2013-01-15 33 views
3

我在想如果有一种方法可以选择特定字段的值超过同一字段的最大值的一半的行。选择特定字段的值大于相同字段的最大值的一半的行

例如,我们有一个包含3个字段(id,name,rate)的结果集,即rate是一个别名。如果最大费率为70,则查询应返回rate > 35(即3570的一半)的所有行。

喜欢的东西:

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

请注意,我不知道什么是最大速率,并希望做一个单一的查询。

更新
主要选择是一个非常沉重的查询和速度是一个别名,所以使用子查询的最大速率需要重新编写重查询。

回答

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 
+0

哦,没有发现它的mysql,我的坏,sry;/ – WKordos

+0

我的错朋友,似乎我问我这么简单的问题。所以我编辑了这个问题。 – Omid

4

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

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

这实际上是做这项工作,但似乎我问我的问题如此简单。所以让我编辑它。 – Omid

+0

我的故障朋友,我编辑了这个问题。 – Omid

+0

+1不使用'CTS';) – bonCodigo

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 
1

我觉得这个未经测试的代码可能有效,

从表 中选择ID,名称,费率 按ID分组,名称,费率 费率> max(费率)/ 2;

+0

似乎是解决问题的起点,查询执行但仅返回1行。需要改进的地方。 – Omid

+1

这不起作用。 'having'子句中的'rate'是一行中的任意值。 –

+0

不幸的是不起作用。 'max(rate)'是零 – Omid

相关问题