Как повторно использовать результат подзапроса в MySQL - PullRequest
2 голосов
/ 10 июня 2010

Я делаю статистическую работу так:

SUM    |COND1 |COND2 |...
--------------------------
100    |80    | 70   |...

Результат SUM рассчитывается по нескольким таблицам, и COND являются его подмножеством.

Я написал sql так:

select tmp1.id,sum,cond1,cond2  from (
   select id, count(*) as sum from table1 
   group by table1.id) tmp1
 left join ( 
   select id, count(*) as cond1 from table1
   where condition1
   group by table1.id) tmp2 on tmp1.id=tmp2.id
 left join ( 
   select id, count(*) as cond2 from table1
   where condition2
   group by table1.id) tmp3 on tmp1.id=tmp3.id

проблема в том, что это очень низкая эффективность, было бы лучше, если бы я мог использовать результат tmp1, но я не знаю, как это сделать.

обновление: упрощен SQL, первый подзапрос в этом случае:

select id, count(*) as sum from table1 
   group by table1.id) tmp1

упрощен, реальный - довольно сложный запрос, я имею в виду, как повторно использовать этот вложенный результат выбора, когда я вычисляю cond1 и cond2.

1 Ответ

3 голосов
/ 11 июня 2010

Вы должны попытаться переписать ваш запрос, чтобы сделать все это только за один просмотр таблицы. Используйте оператор IF:

SELECT id, 
COUNT(*) AS sum, 
SUM( IF( condition1 , 1, 0 ) ) cond1, -- emulates a count where condition1
SUM( IF( condition2, 1, 0 ) ) cond2   -- same thing, for condition2
FROM table1
GROUP BY id

Опубликуйте структуру таблицы, если вы хотите выписать правильный запрос:)

...