3

特定のフィールドが同じフィールドの最大値の半分を超える値を持つ行を選択する方法があるかどうか疑問に思っています。

たとえば、rate がエイリアスである 3 つのフィールド (id、name、rate) を持つ結果セットがあるとします。最大レートがそうである場合、クエリは(の半分である)70すべての行を返す必要があります。rate > 353570

何かのようなもの:

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

最大レートがわからないので、単一のクエリで実行したいことに注意してください。

update
main select は非常に重いクエリであり、 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

このテストされていないコードはうまくいくと思いますが、

レート > max(rate)/2 を持つ id、name、rate によるテーブル グループから 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 に答える