2013-01-15 65 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

相關問題