2012-02-06 4 views
0

列内の値を、クエリで返された行数で1つのクエリで除算できますか?列の値をクエリで返された行数で除算します。それは単一のクエリで行うことができますか?

は例えば、私はいくつかの条件に基づいて、テーブルからいくつかの数値を選択します。

select value from table where ... 

のは、それがN行を返し、私は行数で割っ返された値が返されたとしましょう:

select value/N from table where ... 

複数のクエリを使用して行うことができます(たとえば、最初のクエリの後に、私は行の数をクエリし、再度クエリを実行します)。しかし、クエリ条件の重複のないSQLトリックを使用して1回のクエリで実行できるので、複雑な実際の選択(WHERE部分)は1回だけ実行されます。

+0

おそらくいいえ。 MySQLは解析関数(すべての行に対してCOUNT(*))をサポートしていません。サブクエリカウントを実行する必要があります(これは、選択したテーブルを2度目に実行します)。 –

+0

私は、サブクエリ内のいくつかの一時テーブルに結果を最初に選択し、その行を数え、そこから結果を選択することを考えていましたが、単一のクエリでこれを実行できるかどうかはわかりません – Tom

答えて

0

あなたは、単一のクエリでそれを行うことができますが、私の知る限りでは、MySQLであなたは条件を繰り返す必要があります。

select 
value/@cnt from 
table1 
INNER JOIN (select @cnt = count(*) 
FROM table1 WHERE [the same condition as in main query]) ON (1=1) 
WHERE condition 

それとも、できるだけ

SELECT value/(SELECT COUNT(*) FROM table1 WHERE ...) 
FROM table1 
WHERE ... 

私はオプティマイザを信じます両方のクエリに対して同じ実行計画を生成する必要があります。

関連する問題